GeekBand.重學(xué)C++(2)

類間關(guān)系:組合/委托/繼承

Composition 組合(has-a)

  • Container has a Component: Component 類 功能很全面脆诉,Container 類根據(jù)需要設(shè)計(jì)對外接口挣跋,實(shí)現(xiàn)全部在 Component 類中仅政。
Composition
  • 內(nèi)存:Container 對象的內(nèi)存中,包含一塊 Component 的內(nèi)存; 由內(nèi)而外構(gòu)造谷饿,由外而內(nèi)析構(gòu).
Composition memory

Delegation 委托(Composition by reference)

  • Handle reference Body:所有實(shí)現(xiàn)都在 Body 類中完成荧降;Handle 根據(jù)需要設(shè)計(jì)對外接口,通過調(diào)用 Body 的方法實(shí)現(xiàn)
Delegation
  • 內(nèi)存分布:Handle 類有一塊內(nèi)存及志,存放 Body 類對象的內(nèi)存地址
Delegation memory
  • Delegation 的優(yōu)點(diǎn):
    • 信息隱藏
      包含 Handle 類所在的頭文件片排,不僅成員函數(shù)實(shí)現(xiàn)不可見,類中實(shí)際的數(shù)據(jù)成員也不可見速侈,很好的實(shí)現(xiàn)了信息隱藏率寡。
    • 編譯防火墻
      修改 Body 類,包含 Handle 類頭文件的所有源文件都不需要重新編譯倚搬,只需要編譯 Body 類所在的源文件冶共。在大工程中,可以有效的減少編譯時間每界。
    • Copy on write
      Body 類增加引用計(jì)數(shù)字段捅僵,多個 Handle 類的對象可以引用同一個 Body 對象,某個 Handle 對象需要改變 Body 對象的數(shù)據(jù)成員時眨层,Copy 一份副本供其修改命咐。如果類 size 很大,可以減少內(nèi)存使用谐岁。

Inheritance 繼承(is-a)

  • 內(nèi)存分布:子類對象的內(nèi)存中,包含一塊父類對象;由內(nèi)而外構(gòu)造伊佃,由外而內(nèi)析構(gòu)
Inheritance
Inheritance memory
  • 哪些成員可以被繼承窜司?哪些不能繼承?
    • 數(shù)據(jù)成員都被繼承
    • 友元關(guān)系不能繼承
    • 非虛成員函數(shù)航揉。子類可以覆寫(override)
    • 虛函數(shù)塞祈,子類可以重寫
    • 純虛函數(shù),子類必須實(shí)現(xiàn) (父類可以定義)
  • 價值在于帅涂,與虛函數(shù)搭配使用议薪,實(shí)現(xiàn)多態(tài)

Inheritance with virtual

  • Template Method:父類的成員函數(shù)實(shí)現(xiàn)應(yīng)用程序框架(處理流程),將子類中不同的步驟定義為虛函數(shù)媳友,子類重寫斯议。
  • 優(yōu)點(diǎn):代碼重用,子類只需要實(shí)現(xiàn)與父類不同的部分醇锚,其他部分可以使用父類的實(shí)現(xiàn)哼御。

Inheritance + Composition

  • Observer:解決一份數(shù)據(jù)多種表現(xiàn)形式問題。
  • Composite:嵌套 has-a 的形式焊唬。
  • Prototype:框架已經(jīng)寫好恋昼,框架中會創(chuàng)建子類對象,但是未知子類可能很長時間以后才會定義赶促。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末液肌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鸥滨,更是在濱河造成了極大的恐慌嗦哆,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爵赵,死亡現(xiàn)場離奇詭異吝秕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)空幻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門烁峭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人秕铛,你說我怎么就攤上這事约郁。” “怎么了但两?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵鬓梅,是天一觀的道長。 經(jīng)常有香客問我谨湘,道長绽快,這世上最難降的妖魔是什么芥丧? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮坊罢,結(jié)果婚禮上续担,老公的妹妹穿的比我還像新娘。我一直安慰自己活孩,他們只是感情好物遇,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著憾儒,像睡著了一般询兴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上起趾,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天诗舰,我揣著相機(jī)與錄音,去河邊找鬼阳掐。 笑死始衅,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的缭保。 我是一名探鬼主播汛闸,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼艺骂!你這毒婦竟也來了诸老?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤钳恕,失蹤者是張志新(化名)和其女友劉穎别伏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忧额,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厘肮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了睦番。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片类茂。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖托嚣,靈堂內(nèi)的尸體忽然破棺而出巩检,到底是詐尸還是另有隱情,我是刑警寧澤示启,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布兢哭,位于F島的核電站,受9級特大地震影響夫嗓,放射性物質(zhì)發(fā)生泄漏迟螺。R本人自食惡果不足惜冲秽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望煮仇。 院中可真熱鬧劳跃,春花似錦、人聲如沸浙垫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夹姥。三九已至,卻和暖如春辙诞,著一層夾襖步出監(jiān)牢的瞬間辙售,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工飞涂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旦部,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓较店,卻偏偏與公主長得像士八,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子梁呈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容