【共讀Primer】53.[6.4]函數重載 Page207
阿新 • • 發佈:2018-09-08
建議 bool 我們 tel size 沒有 函數的重載 運用 end
在同一個作用域內,幾個函數名字相同但形參列表不同,我們成為重載(voerloaded)函數。
void print(const char *cp); void print(const int *beg, const int*end); void print(const int ia[], size_t size); int j[2] = {0, 1} print("Hello World"); print(j , end(j) - begin(j)); print(begin(j) - end(j));
在上面的重載函數中,編譯器將通過實參的類型和數量進行調用實際函數的選擇。
PS: main函數不能被重載
定義重載函數
函數的重載必須在參數數量或參數類型上有差異,返回值的差異不計入重載條件
// 下面的重載正確,參數類型不同 Record lookup(const Account&); Record lookup(const Phone&); Record lookup(const Name&); // 下面的重載不成立, 只有返回值不同,但是返回值不計入重載條件 Record lookup(const Account&); bool lookup(const Account&); // 下面兩個函數重載不成立,類型沒有變化,只是省略了形參名稱Record lookup(const Account &acct); Record lookup(const Account &); // 下面的兩個函數重載不成立,實際是一個類型 typedef Phone Telno; Record lookup(const Phone&); Record lookup(const Telno&);
重載和const形參
在含有const和不含有const的重載中,編譯器依然會根據具體的參數類型來選擇需要調用的函數。
關於重載的一些建議
一般來說我們會將重載運用在運行過程相似或一致的情況下,使用重載來表示,因為這樣不會使調用者產生疑惑。
【共讀Primer】53.[6.4]函數重載 Page207