預設引數的函式

2021-09-06 06:17:48 字數 1657 閱讀 9767

第九節 預設引數的函式

1.預設引數的目的

c++可以給函式定義預設引數值。通常,呼叫函式時,要為函式的每個引數給定對應的實參。例如:

void delay(int loops); //函式宣告

void delay(int loops) //函式定義

void point(int a)

void point()

可以用下面的預設引數的函式來替代:

void point(int=3,int=4);

當呼叫「point();」時,即呼叫「point(3,4);」 它是第3個宣告的過載函式。

當呼叫「point(6);」時,即呼叫「point(6,4);」,它是第2個宣告的過載函式。

當呼叫「point(7,8);」時,即呼叫第1個宣告的過載函式

如果一組過載函式(可能帶有預設引數)都允許相同實參個數的呼叫,將會引起呼叫的二義性。例如:

void func(int); //過載函式之一

void func(int,int=4); //過載函式之二,帶有預設引數

void func(int=3,int=4); //過載函式之三,帶有預設引數

func(7); //error: 到底呼叫3個過載函式中的哪個?

func(20,30) //error:到底呼叫後面2個過載函式的哪個?

5.預設值的限定

預設值可以是全域性變數、全域性常量,甚至是乙個函式。例如:

int a=1;

int fun(int);

int g(int x;fun(a)); //ok:允許預設值為函式

預設值不可以是區域性變數,因為預設引數的函式呼叫是在編譯時確定的,而區域性變數的位置與值在編譯時均無法確定。例如:

void fun()

本章小結

隨著程式量和程式複雜度的不斷增加,最好的辦法是把程式分成更小,更容易管理的模組,這種模組就是函式。

函式名最好能反映出所要完成的任務。

函式可以把資料返回給呼叫者,若函式要返回乙個值,必須在函式名前規定返回值的型別,若函式沒有返回值,則型別為void。

程式通過引數把資訊傳遞給函式,若函式需要接受引數,就必須給引數指定名稱及型別。

c++必須知道函式的返回型別以及接受的引數個數和型別, 如果函式的定義出現在函式呼叫之後,就必須在程式的開始部分用函式原型進行宣告。

區域性變數是在函式內部定義的,只能被定義該變數的函式訪問。全域性變數是指其作用域貫穿程式始終的變數。定義全域性變數要在程式開始時進行,並且放在所有函式的外面。

靜態區域性變數是在函式內部定義,但生命期卻隨函式的第一次被呼叫而產生, 隨程式的結束而結束, 靜態區域性變數只能在定義該變數的函式中可見。

函式呼叫機制是由棧操作的過程實現的。函式可以遞迴呼叫。函式定義不能放在任何函式定義的裡面。

內聯函式是為了提高程式設計效率而實現的, 它克服了用#define巨集定義所帶來的弊病。

函式過載允許用同乙個函式名定義多個函式。連線程式會根據傳遞給函式的引數數目、型別和順序呼叫相應的函式。函式過載使程式設計簡單化,程式設計師只要記住乙個函式名,就可以完成一系列相關的任務。

在函式定義中通過賦值運算,即可指定預設引數值。一旦程式在呼叫函式時預設了引數值, 函式就使用預設引數值。 不允許在引數中間使用預設值。指定預設引數值可以使函式的使用更為簡單,同時也增強了函式的可重用性。

C (帶有預設引數的函式引數)預設函式引數

預設引數?在c 中,允許實參的個數與形參的個數不同。在宣告函式原型時,為乙個或者多個形參指定預設值,以後呼叫這個函式時,若省略某乙個實參,c 則自動的以預設值作為相應引數的值。實列說明 includeusing namespace std int add int x 4,int y 7 int ma...

函式的預設引數

c 中只能定義一次預設值,即原型說明時定義了預設值,後面的函式定義不能有預設值,且預設引數都必須是從右到左定義,呼叫時實參對形參的初始化必須是從左向右的 比如 函式宣告f int i 5 定義了預設值。後面對f的函式定義時就不需要提供預設值了 f int i 即函式定義不能寫成 f int i 5 ...

函式的預設引數

c 在宣告函式原型的時候,可以為乙個或多個引數指定預設引數值,當函式呼叫的時候,如果沒有指定這個值,編譯器會自動用預設值替代。void fun int a 1,int b 2 int main 注意點 1.void fun int a,int b 1,int c 2 若形參b是預設引數,那麼形參c必...