考虑下面的示例:
#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”在派生类中以不同的返回类型重新定义。但是编译器抛出了错误。我的理解正确吗?