#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;
}