C++中的類間通信
消息:{
消息名(來自A,即A的方法名)
消息參數(即函數形參)
消息返回(即函數的返回值) }圖中,類A裏封裝了類A的數據和方法;
類B中封裝了類B的數據(類A的指針和類B的數據成員)和類B的方法;
類B的方法即通過封裝類A的子對象或者類A的指針來實現對類A的方法調用!
#include<iostream>
using namespace std;
class A{
private:
int x;
public:
A(){x=0;
cout<<"這是類A的構造!"<<endl;
}
A(int x){
this->x=x;
cout<<"這是類A的構造!"<<endl;
}
void fun(){
cout<<"這是A的fun函數!"<<endl<<"x="<<x<<endl;
}
~A(){cout<<"這是A的析構!"<<endl;}
};
class B{
private:
A *pa;
int y;
public:
B(){
y=0;
cout<<"這是B的構造!"<<endl;
}
B(int i){
pa=new A(i+5);
y=i+5;
cout<<"這是B的構造!"<<endl;
}
void dofun(){
cout<<"這是B的dofun()函數——"<<endl<<"y="<<y<<endl;
pa->fun();
}
~B(){
delete pa;
cout<<"這是B的析構!"<<endl;}
};
int main(){
A a1(3);
a1.fun();
B b1(3);
b1.dofun();
return 0;
}
1、上述代碼中,通過類B封裝類A的指針,在調用類B的方法時調用A的方法,以實現類間通信
2、在調用類B的方法時,由於在B中封裝了類A的指針,在B構造的實現中創建了A的對象,所以先調用A的構造,再調用B的構造,最後析構時先調用B的析構,再調用A的析構。
注:在pa=new A(3); 一句中,先創建A的對象,指向對象的爲A的this指針,然後調A的構造,初始化成功後將對象地址賦給pa,若調用構造失敗,則創建對象失敗,系統自動釋放它。
像上述代碼與類圖描述的模式我們稱之爲——門面模式
—-即對固定的類進行固定順序的調用,如下——>