// A8.cpp - accessing derived class extensions of base class protocol #include namespace mt = std; class X { public: virtual ~X() {} virtual void mf1() { mt::cout << "\n X::mf1() called"; } virtual void mf2() { mt::cout << "\n X::mf2() called"; } }; class Y : public X { public: virtual ~Y() {} virtual void mf2() { mt::cout << "\n Y::mf2() called"; } virtual void mf3() { mt::cout << "\n Y::mf3() called"; } }; void main() { X x; Y y; X *pX = &x; pX->mf1(); pX->mf2(); Y *pY = dynamic_cast(pX); if(pY) pY->mf3(); else mt::cout << "\n dynamic cast fails"; pX = &y; pX->mf1(); pX->mf2(); //pX->mf3(); can't use extensions to base protocol // with base pointer pY = dynamic_cast(pX); if(pY) pY->mf3(); else mt::cout << "\n dynamic cast fails"; mt::cout << "\n\n"; }