C 函式過載

2021-09-14 05:23:46 字數 1324 閱讀 2263

在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,僅僅返回值不同是不能作為函式過載,這屬於函式重定義 形參表包括 引數的型別 ...