方法重载

2017-04-13  本文已影响0人  MinoyJet

方法重载

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

上一篇 下一篇

猜你喜欢

热点阅读