0

可能重复:
C++ 虚函数返回类型

我在这里有一个简单但令人困惑的问题。重写方法的返回值类型与基类中定义的抽象方法不同是否合法?我这样做了,编译器没有抱怨......有人可以解释一下吗?

class MyBaseClass
{
    int value;

public:
    virtual int getValue() = 0;
};

class MyClass : public MyBaseClass
{
    double value;

public:
    virtual double getValue(); // here!!! return is double, not int
};

double MyClass::getValue()
{
   return this->value;
}

编译器完全接受了类似的东西(MSVC und MinGW)......谁能解释一下这在多大程度上是合法的?

4

2 回答 2

2

返回类型允许不同,但仅限于限制性的方式,并且您的代码是非法的。允许覆盖的返回类型不同的唯一方法是,如果基的返回类型是指针或引用,则它可以是协变的。换句话说:如果基类返回一个指针或对基类的引用,则允许覆盖分别返回对基类派生类的指针或引用。

于 2012-04-08T11:28:56.840 回答
0

你压倒一切吗?看起来你已经写了一个方法,没有别的。

于 2012-04-08T16:55:42.873 回答