面向對象之設計模式的先行軍

C++中的類間通信

類B封裝對類A的方法調用

消息:{
消息名(來自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;
}

這是以上代碼的輸出
類B要向類A通信
1、上述代碼中,通過類B封裝類A的指針,在調用類B的方法時調用A的方法,以實現類間通信
2、在調用類B的方法時,由於在B中封裝了類A的指針,在B構造的實現中創建了A的對象,所以先調用A的構造,再調用B的構造,最後析構時先調用B的析構,再調用A的析構。

注:在pa=new A(3); 一句中,先創建A的對象,指向對象的爲A的this指針,然後調A的構造,初始化成功後將對象地址賦給pa,若調用構造失敗,則創建對象失敗,系統自動釋放它。


像上述代碼與類圖描述的模式我們稱之爲——門面模式
—-即對固定的類進行固定順序的調用,如下——>

這裏寫圖片描述

發佈了31 篇原創文章 · 獲贊 17 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章