十一、重载函数与函数模板

一.重载函数
什么是重载函数?
	重载函数就是两个及以上的函数同名,但形参个数或类型不同。编译器根据实参与形参类型和个数进行最佳匹配。
什么要定义重载函数?
	试想,如果没有重载函数,比如简单的加法运算,那么要对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;
}
这样就大大提高了代码的利用率。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值