一.重载函数
什么是重载函数?
重载函数就是两个及以上的函数同名,但形参个数或类型不同。编译器根据实参与形参类型和个数进行最佳匹配。
什么要定义重载函数?
试想,如果没有重载函数,比如简单的加法运算,那么要对int,double等不同类型定义名称的函数,明显太杂乱了,因为调用的函数名太多,且功能相似。
定义重载函数要注意的地方、
函数间的的形参类型和个数必须有一样不同。(因为是根据形参类型和个数匹配,如果函数名,形参类型、个数相同,就算是返回值类型相同,编译器会认为是函数重复定义的语法错误),下面就是常见的错误定义。
int add(int x,int y);
int add(int a,int b);
//错误,编译器不会根据形参名来区分,上面为同一函数
int add(int x,int y);
void add(int x,int y);
//虽然返回值不同,也确实是两个函数。但编译器不会以返回值区分,重复定义
需要注意的是:重载函数只看参数个数和类型(这两个必须至少有一样不同),不看返回值。也就是说不能出现只有返回值不同的重载。
二.函数模板
重载函数虽然方便,但有时不能达到最优效果。如下:
int abs(int x)
{
returnx<0 ? -x:x;
}
doubleabs(double x)
{
returnx<0 ? -x:x;
}
我们注意到,这两个函数除了返回值和参数类型不同,功能完全一样的,虽然我们可以定义多个不同类型的重载,但明显效率不高了。这种情况下,我们可以用函数模板。
template<typename 标识符>
函数定义
template<typenameT>
T abs(T x)
{
return x<0?-x,x;
}
这样就大大提高了代码的利用率。