P4-重载与模板

 这一章主要讲得就是重载和模板。其中重载又分为了函数名重载,运算符重载和输入/输出插入符重载。
一:函数名重载
        C++允许一个函数名对应多个函数体,形成函数名的多态性。在C++中,编译器主要是靠重载函数的参数形式的不同来与函数体绑定,而不是靠返回值的类型。
        因此:要实现函数名重载,就是说函数名必须相同,参数形式必须不同。参数形式不同主要包括类型不同,或者参数个数不同。
        1)类型不同时,注意调用转换的二义性。例如:对于重载函数float max(float a,float b),double max(double a,double b),当使用语句max(2,5)时,将会出现转换方面的绑定二义性。
        2)个数不同时,注意默认参数产生的二义性。所谓的默认参数,就是说在函数声明和定义时,直接对参数赋值。它有两个特点,一个是默认参数只可以函数声明中设定一次,只有无函数声明时,才可在函数定义中设定。另一个特点是定义顺序从右到左(但调用顺序是从左到右的),即一个参数设定了缺省值后,右边的参数都需要有才可。如int max(int a,int b=2,int c=3)是对的,而int max(int a,int b=2,int c)则是错误的。
        若有默认参数函数int max(int a int b=2, int c=3,int d=4),则max(1)已等价于max(1,2,3,4),因此文件中不能再有重载函数int max(int a)出现。由于参数a并没有默认赋值,因此调用max()也将是错误的。
        3)函数功能不同,不要做重载,以免出现调用结果的误解。如int add(int x, int y){return x+y;} float add(float x, float y){return x*y;}。
        4)函数值相同,参数形式也相同,只有返回值不同的函数,C++编译器不能对它们从参数形式上加以区别,会被认为是一个函数的重复说明。
二:运算符重载和插入符重载
        这个没有做过深入的研究,既然是重载,必然也会跟函数重载类似,它有两种重载形式:成员函数方式和友元函数方式。以下也是运算符重载的注意事项。
        1)不能改变优先级和结合性
        1)程序员不能定义新的运算符有:.,  *,  ::, ?:。
        2)对一元运算符,友元函数形式重载时,只声明一个形参;成员函数形式重载时,不显示声明形参。
              对二元运算符,友元函数形式重载时,声明二个形参;   成员函数形式重载时,显示声明一个形参。(记住不能带两个参数哦)
三:函数模板/类模板
        重载函数主要是解决函数名相同,参数形式不同(参数个数不同,或者参数类型不同)的问题。
        函数模板只解决函数名相同,参数个数也相同,仅类型不同的问题。
        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值