在 C++ 中,若在同一作用域內宣告多個同名函數,但其參數列表(參數個數、類型或順序)不同,這稱為函數重載。重載讓我們能用同一函數名稱處理不同類型或數量的資料,提升程式碼的可讀性與復用性。
int abs(int i); long abs(long l); double abs(double d);
參數類型不同,構成合法重載。
int abs(int i); long abs(int i); // 僅返回類型不同 → 錯誤 void abs(int i); // 同上
| 形式 | 說明 |
|---|---|
| 參數個數不同 | 如 fun(int) vs fun(int, int) |
| 參數類型不同 | 如 fun(int) vs fun(double) |
| 參數順序不同 | 如 fun(int, double) vs fun(double, int) |
| 個數與類型皆不同 | 綜合上述情況 |
呼叫時,編譯器依照實際參數的個數、類型、順序進行最佳匹配。若找到唯一最佳匹配則呼叫該函數;若有多個同等匹配則報「呼叫不明確」錯誤;若無匹配則報「找不到符合的函數」。
#include <iostream>
using namespace std;
void fun(int a, int b) {
cout << "int fun" << endl;
}
void fun(double a, double b) {
cout << "double fun" << endl;
}
int main() {
fun(10, 20); // 呼叫 int 版本
fun(3.14, 2.71); // 呼叫 double 版本
return 0;
}

const 修飾符區分 const 與非 const 版本(如容器的 operator[])。掌握函數重載,能讓你設計出更直觀、更符合直覺的 C++ 介面。