函數重載:
函數名字相同,最少起碼是參數的類型不一樣,參數個數不一樣那更好了,但是不能只是返回類型不一樣。
void func(int n) {...};
void func(float n) {...};
一起調用:
func(10);
func(20.001);
這時編譯不通過,提示重載函數的調用不清楚,因為第二個可能會把float強制轉換為int,所以必須明確的強制指定為float才行,下面的調用編譯通過:
func(10);
func((float)20.001); 或者 func(20.00f);
重載函數通過簽名(signature)進行識別,簽名是函數名和參數類型的組合。
編譯器用函數參個數和類型編碼每個函數標識符(或名字改編),以保證類型安全連接。如Borland C++中,每個
改編名用 @加上函數名
改編參數以 $q 開頭
zc 表示 char, pf 為 float*, pd 為 double*, i 為 int, pi, f, d,
如 void nothing(int a, float b, char c, double *d); 的改編名為
@nothing$qifzcpd
重載函數通常用于不同類型用不同程序邏輯進行類似的操作。
如果每種數據類型的程序邏輯和操作相同,那么使用函數模板會更好一些。
template <class T>
T max(T a, T b, T c) {
T max;
max= a > b? a : b;
max = max > c? max : c;
return max;
}