函式過載:是指同一作用域內,一組具有相同函式名,不同引數列表的函式,構成過載關係,這組名稱相同的函式成為過載函式。過載函式通常完成的功能相近,這樣做的好處是減少了函式名的數量,提高了程式的可讀性。
注意:過載與函式的返回型別無關,引數相同僅返回值不同的兩個函式不構成過載關係,與形參名字無關,只與引數的個數、型別、順序有關。
//可以構成過載關係的例子
void fun(void);
void fun(int);
void fun(double);
void fun(int , double)
void fun( double, int);
相同型別的引用與非引用型別不構成過載關係,例如:void fun( int );與void fun( int & r);不構成過載關係。
過載解析:在函式呼叫的時候,根據實參與形參的型別匹配情況,選擇乙個確定的過載版本,這個過程叫做過載解析。
注意:只有在同乙個作用域中的同名函式才會涉及到過載問題,不同作用域中的同名函式遵循隱藏的原則。
函式指標與過載的關係:函式指標的型別決定與其匹配的過載版本。例如:
double fun(int n);
char * fun(float n);
doule (*pfun)(int) = fun;//對應double fun(int n);
char *( *pfun)(float) = fun;//對應char * fun(float n);
c++中的函式過載是通過函式換名來實現的,因此換名機制業限制了c語言和c++模組之間的交叉引用。通過extern "c"可以要求c++編譯器按照c語言的處理方式處理函式介面,因此不做換名處理,也就無法進行過載。
函式預設引數
函式預設引數:即可以為函式的部分或全部形參指定預設值,呼叫該函式時,如果不給實參,就取預設值作為相應的形參的值。
注意:(使用確實值時的注意事項)
1、函式預設引數必須靠右,如果乙個引數有預設值,那麼 這個引數的右側所有引數都必須有預設值。
2、如果需要將函式的定義和宣告分開,預設引數只能寫在函式宣告的部分,而定義部分不要指定函式的預設引數,但是可以通過注釋的方式提高**的可讀性。
//預設引數使用
void func(int a,int b=100/*預設引數*/)
//預設引數必須靠右
void func(int a=20,int b);//error
void func(int b,int a=20);//ok
//函式宣告的時候寫預設值,定義是不能寫
void fun( int a,int b=100 );//宣告
void fun( int a,int d /* =100 */)
//函式某個引數預設則其右側所有引數都必須要有預設值
void func(int b,int a=20,int b =10,int c );//error
void func(int b,int a=20,int b =10,int c=5 );//ok
預設引數與函式過載
預設引數是 宣告或定義函式時為函式的 引數指定乙個預設值。在呼叫該函式時,如果沒有指定實參則採用該預設值,否則使用指定的實參。void testfunc int a 0 注意 如果生命與定義位置同時出現,恰巧兩個位置提供的值不同,那編譯器就無法確定到底該用那個預設值。3.預設值必須是常量或者全域性變...
預設引數與函式過載
一.預設引數 形參a和b都帶有預設值 使用者用掉該函式時,沒傳參,就用預設值。傳參就用所傳值。1,分類 1.全預設引數 每個引數都帶有預設值 void t int a 1,int b 2,int c 3 int t 不能過載,引數列表相同,不能過載。注意 如果兩個函式僅僅是返回型別不同,則不能構過載...
C 函式過載, 預設引數
在我們的自然語言當中,乙個詞在不同的情景之下可能會有多重不同的含義,但是我們可以通過合理地判斷來確定該詞的真正含義,這種情況,我們可以說該詞被 過載 了.關於函式過載的概念 函式過載其實就是函式的一種特殊的情況,在我們的c 中允許在同一作用域當中宣告幾個功能類似的同名函式,但是這個同名函式的形參列表...