函數重載允許同一作用域內定義多個同名函數,只要參數列表不同(參數個數、類型或順序)。編譯器根據實參類型與個數,在編譯期靜態綁定到對應實現,實現靜態多態。
注意:若需兼容 C 語言鏈接(如 extern "C"),則不能重載,因 C 無名稱修飾機制。
編譯器按以下優先級匹配:
... 匹配若存在多個同等最佳匹配,報二義性錯誤。
#include <iostream>
using namespace std;
int add(int x, int y) { return x + y; }
double add(double a, double b) { return a + b; }
int main() {
cout << add(3, 5) << endl; // 調用 int 版本,輸出 8
cout << add(2.5, 3.7) << endl; // 調用 double 版本,輸出 6.2
return 0;
}
#include <iostream>
using namespace std;
int min(int a, int b) { return a < b ? a : b; }
int min(int a, int b, int c) { return min(min(a, b), c); }
int min(int a, int b, int c, int d) { return min(min(a, b), min(c, d)); }
int main() {
cout << min(5, 3) << endl; // 3
cout << min(5, 3, 8) << endl; // 3
cout << min(5, 3, 8, 1) << endl; // 1
return 0;
}
int foo(); double foo(); 錯誤。void f(int a, int b=10); void f(int a); 調用 f(5) 時編譯器無法決定。using Base::func; 引入。構造函數重載是最典型場景,提供多種初始化方式。運算符重載(如 operator+、operator<<)亦屬重載範疇,極大提升類的易用性。結合虛函數可實現動態多態,構成 C++ 面向對象核心機制。