重写类的不同返回值

时间:2012-04-08 11:16:39

标签: c++ class inheritance polymorphism override

  

可能重复:
  c++ virtual function return type

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

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和MinGW)......任何人都可以在某种程度上放弃这是合法的吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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