C 函式過載

2021-09-26 22:42:37 字數 1678 閱讀 9928

如果同一作用域內的幾個函式名字相同但形參列表不同,我們稱之為過載函式

這些函式接受的形參型別不一樣,但是執行的操作非常類似。當呼叫這些函式時,編譯器會根據傳遞的實參型別推斷想要的是哪個函式。

對於過載的函式來說,他們應該在形參數量或形參型別上有所不同。

注意

不允許兩個函式除了返回型別外其他所有的要素都一樣

record lookup(const account&);
在有時候,兩個形參列表看起來不一樣,但實際上相同

//每對宣告的是同乙個函式

record lookup(const account &acct);

record lookup(const account&);//省略了形參的名字

typedef phone telno;

record lookup(const phone&);

record lookup(const telno&);//telno和phone的型別相同

record lookup(int a);

record lookup(int b);

過載和const形參

會忽略掉頂層const

record lookup(phone);

record lookup(const phone);//錯誤,重複宣告

record lookup(phone *);

record lookup(phone *const);//錯誤,重複宣告

const_cast 和過載
//比較兩個string物件的長度,返回較短的引用

const string &shorterstring(const string &s1,const string &s2)

//利用const_cast實現函式過載

string &shortstring(string &s1,string &s2)

函式匹配問題

可行函式具有如下特點:一是其形參數量與本次呼叫的提供的實參數量相同,二是每個實參的型別與對應的形參型別相同,或者能轉換。

基本思想實參型別與形參型別越接近,他們匹配的越好。如果在檢查了所有實參後沒有任何乙個函式脫穎而出,則該呼叫二義性錯誤

例:

void f();

void f(int);

void f(int ,int);

void f(double,double=3.14);

//呼叫時

f(5.6);//呼叫void f(double,double);

f(42,2.56);//報錯,存在二義性呼叫,因為不存在最好的匹配

呼叫過載函式時,應盡量避免強制型別轉換

過載與作用域

在不同的作用域無法過載函式名

string read();

void print(const string &);

void print(double);

void foobar(int ival)

所以,建議把過載的函式宣告都放在乙個作用域內。

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