C 函式過載

2021-09-07 13:47:07 字數 1282 閱讀 7542

在我們的日常生活中,常常可以發現,有的詞語有多重含義,即這個詞被過載了。

函式過載,其實是函式的一種特殊情況,c++允許在同一作用域中宣告幾個功能類似的同名函式,這些同名函式的形參列表(引數個數或者型別或者順序)必須不同,常用來處理實現功能類似資料型別不同的問題。例如:

int add(int left, int right)

double add(double left, double right)

long add(long left, long right)

int main()

那麼c語言為什麼不能支援函式過載?c++包含了c語言,它又是如何支援函式過載的呢?

int add(int left, int right);

int main()

編譯器報錯:error lnk2019: 無法解析的外部符號_add,該符號在函式_main中被引用。

由於c++要支援函式過載,命名空間等,使得其修飾規則比較複雜,不同編譯器在底層的實現方式可能都有

差異。 

int add(int left, int right);

double add(double left, double right);

int main()

在vs下,對上述**進行編譯鏈結,最後編譯器報錯:

error lnk2019: 無法解析的外部符號 "double cdecl add(double,double)"(?add@@yannn@z)

error lnk2019: 無法解析的外部符號 "int __cdecl add(int,int)" (?add@@yahhh@z)

通過上述錯誤可以看出,編譯器實際在底層使用的不是add名字,而是被重新修飾過的乙個比較複雜的名

字,被重新修飾後的名字中包含了:函式的名字以及引數型別。這就是為什麼函式過載中幾個同名函式要求

其引數列表不同的原因。只要引數列表不同,編譯器在編譯時通過對函式名字進行重新修飾,將引數型別包

含在最終的名字中,就可保證名字在底層的全域性唯一性。

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