出現在相同作用域的二個函式如果具有相同的名字而形參不同,則稱為過載函式。
在這個定義中有二個注意點:
1.是在相同的作用域,如果,不在相同的作用域,即使形參不同zhe,也不算作是過載函式:
比如一下的例子:
void print(const string &s)
void print(double d)
void f(int value)
在f()函式中的幾個呼叫print()函式的,只有第二個和第三個可以執行成功,第三個是進行了型別轉化,將3.14轉化為了3,而第乙個函式就會報錯,因為,編譯器就會將print()函式認為是在函式內部的這個print,這樣過來就算是把不在同乙個作用域中的另外二個print()函式遮蔽了。
2.是函式名相同,形參不同。形參不同可以是引數的個數,也可以是引數的型別,但是,如果二個函式的引數相同,即使返回型別不同,也不能稱為過載函式。
3.當二個函式的形參的區別只是有無const的限定,這樣的,只有當形參是引用或者指標時,const修飾的形參與沒有修飾的可以構成是過載,其餘的基本型別的,有無const修飾,形參的本質是一樣的。
如下:int f(int s);
int f(const int s);
這二個函式不構成過載,因為,這樣的函式的傳參是一樣的,都是實參的副本,所以,實際上是沒有影響到實參的,這樣過來,假如,你在呼叫時寫的是int n=9;f(n);這樣函式是分不清該呼叫哪個函式,出現了二義性,第二個f函式中的const只是將實參的副本標記為了唯讀的,你可以玩這二個函式中傳入int型的,也可以是const int 型的資料。但是,當引數是引用或者指標時就不一樣了。因為,引用和指標都是將實參的資料傳給函式,而不是複製,所以,這樣的話,會影響到真正的實參的值。看下面的這個例子:
#include
using namespace std;
void f(int &x) {
cout《這個的輸出結果是:2 3;有這個可見:雖然,c可以作為第二個函式的引數,但是,編譯器沒有這樣幹,它將沒有const修飾的實參給了沒有const修飾的形參函式。
注意,這兒的指標時,const修飾的是指標指向的資料,並非,指標的值是唯讀的。
c 中的過載
c 中的過載 c 中的過載包含函式過載和運算子過載,編譯時的多型性就是由這兩種過載實現的。一 函式過載 函式過載 兩個以上的函式有相同的函式名,但是函式的形參個數或者型別不同,編譯器會根據實參與形參的型別和個數進行最佳匹配,自動決定呼叫哪乙個函式。int add int m,int n 函式呼叫前必...
C 中的過載
函式過載 用同一函式名定義不同的函式,當函式名和不同的引數搭配時函式的含義不同。函式過載至少滿足一下的乙個條件 引數個數不同 引數型別不同 引數順序不同 函式的返回值不是函式過載的判斷標準 預設引數和過載在一起,會報錯,產生二義性 void func inta,intb intc 0 void fu...
C 中的函式過載
你可以重新定義或過載的大部分 c 已有的操作符。因此,程式設計師可以像使用使用者自定義型別一樣使用操作符。過載操作符是一類函式,它們就是對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別。像任何其它函式,過載運算子也有返回型別和引數列表。box operator const box ...