c++面向對象高級編程 第四周學習筆記

繼承&複合&委託

複合

template<class T,class sequence=deque<T> >
class queue{
...
protected:
    seqence c;
public:
    //如下徹底利用c的操做函數完成
    bool empty() const{return c.empty();}
    ...
};

在上文中 複合表示的關係爲has-a
queue中的內容所有由deque來實現
因爲複合表示的是一個has-a的關係,因此其大小爲其內部各部分之和。框架

複合關係下的構造和析構

在構造時,複合關係的構造是由內而外,先執行內部構造函數,再執行外部。
而析構時正好相反,析構先執行本身,再執行內部的析構函數。
(Base class 的dtor必須是virtual,不然會出現undefined behavior)函數

委託

clipboard.png
這種利用另外一個類的指針調用實現功能調用叫委託。spa

繼承

繼承表示is a指針

clipboard.png

繼承能夠繼承父類的成員code

clipboard.png
繼承關係下的構造函數首先調用Base的的default構造函數,而後才執行本身。
繼承關係下的析構函數首先析構本身,而後才調用base的析構函數。繼承

虛函數&多態

  1. 非虛函數是不但願子類從新定義它
  2. 虛函數是但願子類去從新定義它,而且你對它已經有了默認定義
  3. 純虛函數是你但願子類必定要從新定義它,你對它沒有默認定義。

繼承+複合下的構造前後問題

clipboard.png

委託+繼承

clipboard.png

clipboard.png

觀察者模式
1,A類有委託容器。
2,A類的容器包含一個能夠繼承的B類。
3,B類可擴展。
4,A類可控制,讓B類有需求的來註冊,註銷。
Composite
1,B類有個容器,能夠放左邊,能夠放右邊。
2,A類作基類,讓左右兩邊都繼承。
3,B類的容器指針指向A類,B類Add控制放左仍是放右。ip

clipboard.png

Prototype(Design Patterns Explained Simply)
1,A類建立未知的子類,
2,讓B類建立靜態本身,
3,B類構造是private,原型放到A類的容器(add),
4, B類clone來實現掛到A類框架,擴展A類(框架)使用。原型

clipboard.png

相關文章
相關標籤/搜索