1. 程式人生 > >【共讀Primer】53.[6.4]函數重載 Page207

【共讀Primer】53.[6.4]函數重載 Page207

建議 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