Consider the example below:
#include <iostream>
using namespace std;
class base
{
public:
virtual int func()
{
cout << "vfunc in base class
";
return 0;
}
};
class derived: public base
{
public:
double func()
{
cout << "vfunc in derived class
";
return 0;
}
};
int main()
{
base *bptr = new derived;
bptr->func();
return 0;
}
The compiler gives an error for the above code that there is conflicting type for the overriden function. Why is it not possible to override a function in the derived class with a different return type ?
I believe, in-order to override a function, the base class virtual method needs to be redefined in the derived class. To redefine a method, the signatures of the methods has to be the same. Since return type is not part of the signature, i believe even if there is difference in return type, the method will still be redefined? In that case for the code above, virtual function func
is redefined in the derived class with a different return type. But the compiler throws an error. Is my understanding correct?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…