#include using namespace std ; class A { public: int x1 ; virtual void function1() { } }; class B : public A { public: int x1B ; }; class C : public A { public: int x1C ; }; int main() { B bObject ; bObject.x1B = 22 ; A* aObject = &bObject ; //Not valid as aObject contains bObject as the //underlying object C* cObject = dynamic_cast (aObject) ; printf( "Pointer value: %p\n" , cObject ) ; if ( cObject != NULL ) cout << cObject->x1C << endl ; A& refAObject = bObject ; try { C& refCObject = dynamic_cast ( refAObject ) ; } catch (const bad_cast& e) { cerr << "Exception: " << e.what() << endl; } }