class Base
{
public:
virtual void func() const
{
cout<<"This is constant base "<<endl;
}
};
class Derived : public Base
{
public:
virtual void func()
{
cout<<"This is non constant derived "<<endl;
}
};
int main()
{
Base *d = new Derived();
d->func();
delete d;
return 0;
}
Why does the output prints “This is constant base”. However if i remove const in the base version of func(), it prints “This is non constant derived”
d->func() should call the Derived version right, even when the Base func() is const right ?
constpart is actually a part of the function signature, which means the derived class defines a new function rather than overriding the base class function. It is because their signatures don’t match.When you remove the
constpart, then their signature matches, and then compiler sees the derived class definition offuncas overridden version of the base class functionfunc, hence the derived class function is called if the runtime type of the object isDerivedtype. This behavior is called runtime polymorphism.