在同一作用域內,**函數名相同、參數列表不同**(型別、個數、順序任一不同),即構成重載。回傳型別**不參與**重載區分。
void Swap(int* a, int* b) {
int t = *a; *a = *b; *b = t;
}
void Swap(float* a, float* b) {
float t = *a; *a = *b; *b = t;
}
void Swap(char* a, char* b) {
char t = *a; *a = *b; *b = t;
}
void Swap(bool* a, bool* b) {
bool t = *a; *a = *b; *b = t;
}
int main() {
int n1=100, n2=200; Swap(&n1, &n2); cout << n1 << ", " << n2 << endl; // 200, 100
float f1=12.5, f2=56.93; Swap(&f1, &f2); cout << f1 << ", " << f2 << endl; // 56.93, 12.5
char c1='A', c2='B'; Swap(&c1, &c2); cout << c1 << ", " << c2 << endl; // B, A
bool b1=false, b2=true; Swap(&b1, &b2); cout << b1 << ", " << b2 << endl; // 1, 0
return 0;
}
呼叫端無需記憶 swapInt、swapFloat 等不同名稱,統一用 Swap,編譯器依實參型別自動匹配。
| 條件 | 是否構成重載 | 說明 |
|---|---|---|
| 參數個數不同 | ✅ | f() vs f(int) |
| 參數型別不同 | ✅ | f(int) vs f(float) |
| 參數順序不同 | ✅ | f(int, float) vs f(float, int) |
| 僅參數名稱不同 | ❌ | f(int a) vs f(int b) 同一函數 |
| 僅回傳型別不同 | ❌ | int f() vs float f() 編譯錯誤 |
| const/volatile 修飾參數 | ✅ | f(int) vs f(const int) 可重載 |
| 引用 vs 值參數 | ✅ | f(int&) vs f(int) 可重載 |