第九節 預設引數的函式
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必...