函数重载:
函数名字相同,最少起码是参数的类型不一样,参数个数不一样那更好了,但是不能只是返回类型不一样。
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;
}