函式過載
函式過載的定義是:在相同的作用域中,如果函式具有相同名字而僅僅是形參表不同,此時成為函式過載。注意函式過載不能基於不同的返回值型別進行過載。
注意函式過載中的「形參表」不同,是指本質不同,不要被一些表象迷惑。main函式不能被過載。
過載確定的三個步驟:
1,候選函式
2,選擇可行函式
3,尋找最佳匹配
4,含有多個形參的過載確定
下面三組定義本質是相同的,不是過載:
1)int sum (int &a); 和 int sum (int &);
2) int sum (int a) 和 int sum (const int a);
3)typedef int dd;
int sum(int a); 和 int sum (dd a);
其中第二個例子對於非引用傳參,形參是否const是等價的。但是當使用引用傳參時,有無const是不同的。使用指標傳參時,指向const物件的指標和指向非const物件的指標做形參的函式是不同的。
基於const的過載。
結論:僅當形參是引用或者指標時,形參是否為const才有影響。
可以基於函式的引用形參是指向const物件還是指向非const物件,來實現函式過載。
注意不能基於指標本身是否為const來實現函式的過載:
f(int *);
f(int * const) //redeclaration
此時,const 用於修飾指標本身,而不是修飾指標所指向的型別。在上面兩種情況中,都複製了指標,指標本身是否是const並沒有帶來區別。當形參以副本傳遞時,不能基於形參是否為const來實現過載。
在類中會有這樣一種過載,它是合法的。
class a ;
可以看到在a類中,function函式是發生過載了,而且是合法的。而且在呼叫時,只用a類的const物件才能呼叫const版本的function函式,而非const物件可以呼叫任意一種,通常非const物件呼叫不是const版本的function函式。
原因是:按照函式過載的定義,函式名相同而形參表有本質不同的函式稱為過載。在類中,由於隱含的this形參的存在,const版本的 function函式使得作為形參的this指標的型別變為指向const物件的指標,而非const版本的使得作為形參的this指標就是正常版本的指 針。此處是發生過載的本質。過載函式在最佳匹配過程中,對於const物件呼叫的就選取const版本的成員函式,而普通的物件呼叫就選取非const版 本的成員函式。
C 函式過載 總結
函式過載概念 c 允許在同一範圍中宣告幾個功能類似的 同名函式 但是這些同名函式的形式引數 指引數的個數 型別或者順序 必須不同 即函式的引數列表不同。這就是 過載函式 過載函式常用來實現功能類似而所處理的資料型別不同的問題。函式過載的意義 過載函式通常用來命名一組功能相似的函式,這樣做減少了函式名...
函式過載與模板的總結
一 函式過載 1 函式名相同 2 函式引數的型別不同,或者引數的個數不同,或者兩者兼而有之。注意 當函式的過載與帶預設值的函式一起使用時,有可能引起二異性。二 模板 1 分類 函式模板與類模板 2 1 函式模板 函式體相同的函式都可以用這個模板來代替,不必像函式過載那樣定義多個函式。關鍵字是temp...
函式呼叫符()過載及總結
為了優化類成員函式的呼叫,對函式呼叫符 進行過載 include using namespace std class fun 過載 第乙個 是過載的符號 第二個 是標明要傳參 intoperator int x,int y void test01 intmain int argc,char ar 因...