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