#include <iostream.h>
class B
{
public:
virtual void f();
virtual void g();
virtual void h();
};
class C : public B
{
public:
void f(); // virtual
};
class D : public C
{
public:
void h(); // virtual
};
void B::f() { cout << "B::f()\n"; }
void B::g() { cout << "B::g()\n"; }
void B::h() { cout << "B::h()\n"; }
void C::f() { cout << "C::f()\n"; }
void D::h() { cout << "D::h()\n"; }
int main()
{
C c;
D d;
B *pb = &c; // ok, &c is a C * which is a B *
pb->f(); // calls C::f()
pb->g(); // calls B::g()
pb->h(); // calls B::h()
C *pc = &d; // ok, &d is a D * which is a C *
pc->f(); // calls C::f()
pc->g(); // calls B::g()
pc->h(); // calls D::h()
B &rb = *pc; // ok, *pc is a C which is a B
rb.f(); // calls C::f()
rb.g(); // calls B::g()
rb.h(); // calls D::h()
return 0;
}
// End of File