面向?qū)ο蟮娜N關(guān)系
一、繼承
繼承可以i表示為 is-a
public/private/protected 繼承方式
構(gòu)造先父類構(gòu)造, 后子類, 析構(gòu)子類先析構(gòu), 父類再析構(gòu)
base class的dtor必須時virtual
二、復(fù)合 composition ?
繼承可以表示為 has-a
構(gòu)造由內(nèi)到外, 析構(gòu)由外到內(nèi)
Adaptor, 可以通過復(fù)合方式實(shí)現(xiàn)
三、委托 composition by reference
handle /body, ?pimpl ?
復(fù)合包含使用類的實(shí)體, 委托只包含他的指針
四、多態(tài):
1 帶有virtual的繼承?
? 1) non-virtual函數(shù) : 不希望derived class 重新定義(override)
? 2) virtual 函數(shù) ? ? ? ?: 希望derived class 重新定義(override)
? 3) pure virtual 函數(shù): 希望derived class 必須重新定義
Template method application framework 將實(shí)現(xiàn)延遲到子類中實(shí)現(xiàn)
子類再調(diào)用父類函數(shù)時, 將this 指針傳入, 在父類函數(shù)執(zhí)行其他函數(shù)是通過this指針調(diào)用,從而實(shí)現(xiàn)了實(shí)現(xiàn)的延時
五、繼承復(fù)合委托組合情形:
1) 繼承+復(fù)合
derviced 類中組合component時 構(gòu)造析構(gòu)的執(zhí)行順序
在VS/gcc 下試驗(yàn)了一下, 子類含復(fù)合類, 構(gòu)造執(zhí)行順序是
base
component
derived
析構(gòu)順序剛好相反
2) 委托+繼承 observer 通過外部類觀察一個類的變化
3) 委托+繼承 composit 包含簡單和復(fù)雜的類(不可以使用純虛函數(shù))
4)委托+繼承 prototype ?創(chuàng)建未來要涉及的類,構(gòu)造函數(shù)私有(需要通過原型創(chuàng)建)
? ? ?每一個子類自己有子一個個體, 有一個構(gòu)造函數(shù)將個體掛載到父類, 每一個子類有個clone,框架端可以通過clone生成子類的副本
(class靜態(tài)data 要在class 外進(jìn)行一次定義)