如果同一作用域內的幾個函式名字相同但形參列表不同,我們稱之為過載函式。
這些函式接受的形參型別不一樣,但是執行的操作非常類似。當呼叫這些函式時,編譯器會根據傳遞的實參型別推斷想要的是哪個函式。
對於過載的函式來說,他們應該在形參數量或形參型別上有所不同。
注意:
不允許兩個函式除了返回型別外其他所有的要素都一樣
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,僅僅返回值不同是不能作為函式過載,這屬於函式重定義 形參表包括 引數的型別 ...