方法重载

方法重载

21. 辨别方法重载

在调用重载方法时,编译器会根据方法的参数个数、参数类型和方法属性(const 方法),来区分不同的方法,这 3 项也被称为方法的签名。这里需要注意的是方法的签名不包含方法的返回值,也就是说方法返回值类型不作为区分重载方法的标记。

22. 方法重载的歧义现象

下面代码有何错误?

class CCalc
{
public:
    intAdd(int one, int two) //重载 Add 方法
    {
        cout<<"第一个版本的 Add 被调用" << endl;
        return one + two;
    }
    intAdd(int one, int two)const //重载 Add 方法
    {
        cout<<"第二个版本的 Add 被调用" << endl;
        return one + two;
    }
    doubleAdd(int one, int two) //重载 Add 方法
    {
        cout<<"第三个版本的 Add 被调用" << endl;
        return one + two;
    }
};
int main(int argc, char* argv[])
{
    CCalc calc;
    calc.Add(10, 15); //调用重载方法
    return 0;
}

本题中实现了 3 个重载版本的 Add 方法。表面上看来第一个重载方法和第二个方法原型很相似,问题可能出在这里。其实不然,这是出题人设计的一个陷阱。问题出现在第一个重载方法和第三个重载方法,它们的区别是方法的返回值类型不同。在进行方法重载时以参数个数、参数类型和方法属性(const 方法)来区分不同的方法,而不以返回值来区分。

第三个重载版本的 Add 函数出现错误。它与第一版本的 Add 函数会出现歧义。在执 calc.Add(10, 15); 语句时编译器无法区分调用第一个还是第三个版本的 Add 函数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,541评论 1 51
  • 实质 方法的重载是在同一个类中,方法与方法之间的关系。重载其实就是在类中重用方法名。java平台靠方法签名来区分不...
    _Dansh阅读 921评论 0 0
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,282评论 9 118
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,271评论 0 4
  • 例1:求绝对值 1、什么是方法重载 用于定义一组方法,这些方法具有相同的名称,并执行类似的操作,但是却使用不同的参...
    3e1094b2ef7b阅读 679评论 0 0