【发布时间】:2012-02-16 13:07:33
【问题描述】:
考虑下面的例子:
#include <iostream>
using namespace std;
class base
{
public:
virtual int func()
{
cout << "vfunc in base class\n";
return 0;
}
};
class derived: public base
{
public:
double func()
{
cout << "vfunc in derived class\n";
return 0;
}
};
int main()
{
base *bptr = new derived;
bptr->func();
return 0;
}
编译器对上述代码给出了一个错误,即覆盖函数的类型冲突。为什么不能用不同的返回类型覆盖派生类中的函数?
我相信,为了重写一个函数,需要在派生类中重新定义基类的虚方法。要重新定义方法,方法的签名必须相同。由于返回类型不是签名的一部分,我相信即使返回类型存在差异,方法仍然会被重新定义?在这种情况下,对于上面的代码,虚函数func 在派生类中被重新定义,并具有不同的返回类型。但是编译器会抛出错误。我的理解正确吗?
【问题讨论】:
-
为了澄清,什么编译器给你什么错误?
-
@SionSheevok,GCC 至少:codepad.org/z7rXpCeK
-
@SionSheevok :我正在使用 gcc 3.4.6
-
点头我并不是说它不会出错,只是好奇编译器具体试图传达什么。
标签: c++ virtual-functions overriding redefinition