函式過載總結

2021-07-11 15:30:18 字數 1228 閱讀 1052

函式過載

函式過載的定義是:在相同的作用域中,如果函式具有相同名字而僅僅是形參表不同,此時成為函式過載。注意函式過載不能基於不同的返回值型別進行過載。

注意函式過載中的「形參表」不同,是指本質不同,不要被一些表象迷惑。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 因...