1. 程式人生 > 實用技巧 >C++學習(5)

C++學習(5)

組合與繼承

Composition組合,表示has a

queue只開放了deque的部分功能,adapter介面卡模式

組合之下的構造和析構

構造由內而外,先構建裡層一層一層構建

Container的建構函式首先呼叫Component的default建構函式,然後才執行自己

析構由外而內,先剝掉外層再一層一層往裡

Container的析構首先執行自己,然後才呼叫Component的解構函式。

注:以上紅色操作都由編譯器自動完成,這裡剖析其執行次序

Delegation(委託,聚合)Composition by reference

只有一個指標指向對方,但是什麼時候擁有它,看情況。

組合:有了外部就會有內部

聚合:有了外部,等需要內部的時候再去建立它

Handle/Body pimpl:所有的功能都由那個指標完成。

引用計數,共享記憶體,更改時複製一個副本,copy on write

Inheriance(繼承)表示is a

繼承關係下的構造和析構

base class的dtor必須是虛擬函式,否則會出現undefined behavior

構造由內而外

Derived的建構函式首先呼叫Base的default構造安徽省農戶然後才執行自己

析構由外而內

Derived的析構阿寒湖首先執行自己,然後才呼叫Base的解構函式

Inheritance繼承with virtual function虛擬函式

non-virtual 非虛擬函式:你不希望derived class重新定義(override,重寫)它

virtual 函式:你希望derived class重新定義它,並且你對它已經有預設定義

pure virtual函式:你希望derived class一定要重新定義它,你對它沒有預設定義

模板方法 Template Method

Inheritance_Composition關係下的構造和析構

Component先然後是Base

Delegation委託+Inheritance繼承 (觀察者模式)

一個有變化,大家都變化

Subject放資料

Observer觀察者

subject包含函式:attach 新增觀察者、notify通知觀察者

Observer可以被繼承:update接受通知後更新資料

委託的相關設計

Delegation(委託)+Inheritance(繼承)

組合模式

File系統

Primitive基本的個體

Composition是一個容器:可以放Primitive也可以放自己。

左右都繼承Component

Composite即可以包含左邊也可以包含右邊,所以直接將型別直接定義為其共同的父類。

組合模式:例如檔案系統:primitive類比於檔案,composite相當於資料夾裡面可以放檔案也可以放資料夾。

add函式定義成虛擬函式,primitive可以不要重新add

Prototype

現在的框架要去建立未來的class

static 自己創造自己的原型,而這個原型必須登記到父類中。static原型的作用是在再程式開始的時候就把自己註冊到父類中

靜態的自己被建立時會呼叫私有的建構函式(-LandSatImage()),私有的建構函式會呼叫addPrototype()會把自己掛載到父類的容器中。

子類應該有一個clone:作用可以複製自己。框架父類可以通過剛剛static的原型,呼叫clone() new自己。

new的時候一定不能再呼叫靜態的那個,所以作者將另一個建構函式加了一個引數。所以clone的時候呼叫的是有引數的那個建構函式。