在c中,每乙個函式的名字是它的唯一標識,也就是說,在c語言中,不能有名字相同的兩個函式。c++中,允許出現函式名相同,但函式特徵標不同的函式。
函式名相同
形參個數不同
若形參個數相同,則對應位置的引數型別不全相同
某一型別和他的引用型別不能過載
例:
void f(int );
void f(int &);
上述兩個函式不能過載,原因是呼叫時,會出現二義性
先來說型別匹配的情況
例:
void f(int &);
void f(const int &);
void f(int &&);
int a = 3;
const int b = 5;
f(a); //a為int型,與之匹配的是int &
f(b); //b為const int型,與之匹配的是const int &
f(a + b); //a + b是乙個右值,與之匹配的是右值引用int &&
最合適的
//就拿上述例子來說
f(a);
//a是乙個int型
//優先和int & 匹配
//如果沒有f(int &),就呼叫f(const int &)
//f(int &&)與右值匹配,所以,直接繫結時不合法的
f(b);
//b時乙個const int 型
//優先和 const int & 匹配
//如果沒有f(const int &),非const引用無法繫結const左值
//所以,只有f(const int &)和他匹配
f(a + b);
//a + b是乙個右值
//優先和f(int &&)匹配
//如果沒有f(int &&),由於const int & 可以繫結乙個臨時變數,所以,也是匹配的
bool、char、unsigned char、signed char、short 轉換為 int
float 轉換為 double
還有很多,不一一枚舉
int -> char
double -> long
不一一枚舉
例:
void f(int a);
void f(long a);
unsigned int a = 3;
f(a);
這裡a的型別與上面的函式均不匹配,所以需要轉換,然而,可以轉換為int 也可以轉換為long,這裡出現了二義性,所以會報錯 mysql 函式過載 C 方法過載(函式過載)
在講解 c 構造方法 時提到定義構造方法時提到可以定義帶 0 到多個引數的構造方法,但構造方法的名稱必須是類名。實際上,這就是乙個典型的方法過載,即方法名稱相同 引數列表不同。引數列表不同主要體現在引數個數或引數的資料型別不同。在呼叫過載的方法時系統是根據所傳 遞引數的不同判斷呼叫的是哪個方法。例項...
C 函式 函式過載
如果同一作用域內的幾個函式名字相同但形參列表不同,我們稱之為過載函式。void print const char cp void print const int beg,const int end void print const int ia,size t size 這些函式接受的形參型別不一樣,...
C 函式過載
函式過載 overloaded function 在相同的作用域中的兩個函式,如果有相同的名字而形參表不同 注意 如果僅僅函式的返回值不同是不能實現函式過載 void func int int func int error,僅僅返回值不同是不能作為函式過載,這屬於函式重定義 形參表包括 引數的型別 ...