// A2_9.cpp #include using namespace std; class A { int x; public: A() { cout << "\n A's address is " << this; } }; class B { double y; public: B() { cout << "\n B's address is " << this; } }; class C : public A, public B { public: void getBaseAdresses(A* &pA, B* &pB) { pA = static_cast(this); pB = static_cast(this); ////// old-style casts also work ////////////////////////// // // pA = (A*)this; // pB = (B*)this; // ////// this also works //////////////////////////////////// // // pA = &(dynamic_cast(*this)); // pB = &(dynamic_cast(*this)); // ////// note that x and y are not accessible in C ////////// // // int *pX = &A::x; // won't compile // double *pY = &B::y; // won't compile // /////////////////////////////////////////////////////////// } }; void main() { C c; A* pA; B* pB; c.getBaseAdresses(pA,pB); cout << "\n address of base A is " << pA; cout << "\n address of base B is " << pB; cout << "\n address of derived is " << &c; cout << "\n\n"; }