Listing 2 A test program for the hierarchy in Listing 1

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()
   pb->j();       // calls B::j()
   
   C *pc = &d;    // ok, &d is a D * which is a C *
   pc->f();       // calls C::f()
   pc->B::f();    // calls B::f()
   pc->g();       // calls C::g()
   pc->h();       // calls D::h()
   pc->C::h();    // calls B::h()
   pc->j();       // calls D::j()
   pc->C::j();    // calls C::j()
   
   B &rb= *pc;    // ok, *pc is a C which is a B
   rb.f();        // calls C::f()
   rb.B::f();     // calls B::f()
   rb.g();        // calls B::g()
   rb.h();        // calls D::h()
   rb.j();        // calls B::j()
   
   return 0;
   }

// End of File