【发布时间】:2012-04-08 11:16:39
【问题描述】:
我有一个简单但令人困惑的问题。覆盖方法的返回值类型与基类中定义的抽象方法不同是否合法?我这样做了,编译器没有抱怨……有人可以解释一下吗?
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)...谁能解释一下这在多大程度上是合法的?
【问题讨论】:
-
如果你的子类使用双精度,为什么你的基类有 int 值?
-
GCC 4.6.1 抱怨:错误:为“virtual double MyClass::getValue()”指定的返回类型冲突
-
实际上在我的程序中它不是 int 和 double。它是 double 和 MathVector,有 3 个分量。基类生成标量信号,派生类生成3D信号。
标签: c++ class inheritance polymorphism overriding