#include
using namespace std; class A{ private: int real; int imag; public: char *string; A(){ this->real = 10, this->imag = 20; string = "from A()"; } A(int a, int b){ this->real = a; this->imag = b; string = "from A(), init a, b"; } ~A(){ cout << "Deleting class A" << endl; } int calcu(void){ return (real+imag)*2+4; } int chang(int a, int b){ real = a; imag = b; } }; class B{ private: A *ap; public: B(A *p){ ap = p; } ~B(){ cout << "Deleting class B" << endl; } int ControlA(){ cout << "Control A in B" << endl; return ap->calcu(); } int ChangA(int a, int b){ ap->chang(a,b); } }; class C : public B{ private: A *pA; public: C(A *p) : B(p){ pA = p; } ~C(){ cout << "Deleting class C" << endl; } void SetStr(){ pA->string = "Hi , I have been set!"; } int ControlA(int a){ cout << "Control in A" << a << endl; return pA->calcu(); } }; void main() { A *pA = new A(14,2); cout << "From Class A : "<< pA->calcu() << endl; B *pB = new B(pA); cout << "From Class B : "<< pB->ControlA()<< endl; pB->ChangA(13,2); cout << "From Class A : "<< pA->calcu() << endl; cout << "String = " << pA->string << endl; C *pC = new C(pA); pC->SetStr(); cout << "String = " << pA->string << endl; pC->ControlA(100); pC->B::ControlA(); delete pC; delete pA; }