#include
<iostream>
using
namespace std;
class
B
{
public
:
virtual void f1() const
{
cout<<"B::f1"<<endl;
}
virtual void f2() const
{
cout<<"B::f2"<<endl;
}
};
class
D: public B
{
public
:
void f1() const
{
cout<<"D::f1"<<endl;
}
virtual void f3() const
{
cout<<"D::f3"<<endl;
}
};
void
main()
{
D d;
//pointer and reference both can achieve polymophism
B& rb=d;
rb.f1(); //output: D::f1
rb.B::f1(); //output: B::f1
B* pb = &d;
pb->f1(); //output: D::f1
pb->B::f1(); //output: B::f1
char ch;//pause
cin>>ch;
}
Output:
If D::f1 changed to
void f1()
{
cout<<"D::f1"<<endl;
}
That is delete the const, then the result is:
This is because Constness is a part of function signature.