普考-資訊處理計算機概要104 年第 21 題單選題
C++允許定義多載函數(overloaded functions),下列何者是各多載函數遵守的原則?
A回傳型態(return types)必須不同
B參數串列(parameter lists)之型態與個數不能完全相同正確答案
C參數(parameters)個數必須一樣
D內定引數(default arguments)必須一樣
B正確答案
函數多載靠參數串列區分:型態或個數至少要有一項不同,與回傳型態無關。
為什麼答案是 B
正解。多載的核心就是『簽名(signature)不同』,也就是參數串列的型態或個數不能完全相同,編譯器才能依呼叫時傳入的引數選擇對應函數。
載入中…
完整詳解
Pro · 無限重點 函數多載靠參數串列區分:型態或個數至少要有一項不同,與回傳型態無關。
口訣:多載看『參數』不看『回傳』。只要參數型態或個數不同即可。
逐選項分析
A✕ 陷阱
回傳型態不是多載的判斷依據。兩個函數若只有回傳型態不同、參數完全相同,編譯器無法從呼叫端區分,會編譯錯誤。
B✓ 正確
正解。多載的核心就是『簽名(signature)不同』,也就是參數串列的型態或個數不能完全相同,編譯器才能依呼叫時傳入的引數選擇對應函數。
C✕
錯誤。多載函數的參數個數『可以』不同,這正是區分多載的方式之一,例如 f(int) 與 f(int,int) 合法共存。
D✕
內定引數(default arguments)與多載無關,且若設計不當反而會造成呼叫歧義(ambiguous),並非多載必須遵守的原則。
C++ 函數多載判斷表
| 比較項目 | 是否影響多載 | 說明 |
|---|
| 參數型態不同 | ✅ 可多載 | 如 f(int) vs f(double) |
| 參數個數不同 | ✅ 可多載 | 如 f(int) vs f(int,int) |
| 參數順序不同 | ✅ 可多載 | 如 f(int,double) vs f(double,int) |
| 僅回傳型態不同 | ❌ 不可多載 | 編譯錯誤 |
| 僅預設引數不同 | ❌ 不可多載 | 可能造成歧義 |
最常見陷阱是 A『回傳型態必須不同』。很多人直覺以為回傳型態算多載區分依據,但 C++ 規定回傳型態不參與多載決議(overload resolution),真正關鍵在參數串列(signature)。