美文网首页
方法重载

方法重载

作者: MinoyJet | 来源:发表于2017-04-13 19:46 被阅读0次

    方法重载

    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 函数。

    相关文章

      网友评论

          本文标题:方法重载

          本文链接:https://www.haomeiwen.com/subject/liabattx.html