我在这里有一个简单但令人困惑的问题。为重写方法提供不同的返回值类型而不是基类中定义的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)......任何人都可以在某种程度上放弃这是合法的吗?
答案 0 :(得分:2)
允许返回类型不同,但仅限于bery限制方式,并且您的代码是非法的。允许覆盖的返回类型不同的唯一方法是,如果基类的返回类型是指针或引用,则可以是协变的。换句话说:如果base返回一个指针或对基类的引用,则允许overrude分别将指针或引用返回给从基类派生的类。
答案 1 :(得分:0)
你是否压倒一切?看起来你已经写了一个方法而没有别的。