#include <iostream>
using namespace std;
class B
{
public:
virtual void display() /* Virtual function */
{ cout<<"Content of base class.\n"; }
};
class D1 : public B
{
public:
void display()
{ cout<<"Content of first derived class.\n"; }
};
class D2 : public B
{
public:
void display()
{ cout<<"Content of second derived class.\n"; }
};
int main()
{
B *b;
D1 d1;
D2 d2;
/* b->display(); // You cannot use this code here because the function of base class is virtual. */
b = &d1;
b->display(); /* calls display() of class derived D1 */
b = &d2;
b->display(); /* calls display() of class derived D2 */
return 0;
}
CgojaW5jbHVkZSA8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNsYXNzIEIKewogICAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXNwbGF5KCkgICAgICAvKiBWaXJ0dWFsIGZ1bmN0aW9uICovCiAgICAgICAgIHsgY291dDw8IkNvbnRlbnQgb2YgYmFzZSBjbGFzcy5cbiI7IH0KfTsKCmNsYXNzIEQxIDogcHVibGljIEIKewogICAgcHVibGljOgogICAgICAgdm9pZCBkaXNwbGF5KCkKICAgICAgICAgeyBjb3V0PDwiQ29udGVudCBvZiBmaXJzdCBkZXJpdmVkIGNsYXNzLlxuIjsgfQp9OwoKY2xhc3MgRDIgOiBwdWJsaWMgQgp7CiAgICBwdWJsaWM6CiAgICAgICB2b2lkIGRpc3BsYXkoKQogICAgICAgICB7IGNvdXQ8PCJDb250ZW50IG9mIHNlY29uZCBkZXJpdmVkIGNsYXNzLlxuIjsgfQp9OwoKaW50IG1haW4oKQp7CiAgICBCICpiOwogICAgRDEgZDE7CiAgICBEMiBkMjsKCi8qIGItPmRpc3BsYXkoKTsgIC8vIFlvdSBjYW5ub3QgdXNlIHRoaXMgY29kZSBoZXJlIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIG9mIGJhc2UgY2xhc3MgaXMgdmlydHVhbC4gKi8KCiAgICBiID0gJmQxOwogICAgYi0+ZGlzcGxheSgpOyAgIC8qIGNhbGxzIGRpc3BsYXkoKSBvZiBjbGFzcyBkZXJpdmVkIEQxICovCiAgICBiID0gJmQyOyAgICAgICAgICAgCiAgICBiLT5kaXNwbGF5KCk7ICAgLyogY2FsbHMgZGlzcGxheSgpIG9mIGNsYXNzIGRlcml2ZWQgRDIgKi8KICAgIHJldHVybiAwOwp9