※ 本文為 xxxx9659.bbs. 轉寄自 ptt.cc 更新時間: 2013-05-01 03:26:39
看板 C_and_CPP
作者 標題 Re: [問題] 相似的class中減少code duplication
時間 Sat Apr 27 03:56:28 2013
※ 引述《azureblaze (AzureBlaze)》之銘言:
: 我有兩個class A和B。
: 他們做的事差不多,只在某些細節上不一樣
: 大部分的地方都可以透過拉出一個共同的base class
: 再繼承來解決。
: 不過有些地方可能長這樣
: A::doSomething(){ B::doSomething(){
: BaseMethod1(); BaseMethod1();
: BaseMethod2();
: B_Specific_Operations();
: A_Specific_Operations();
: BaseMethod2();
: BaseMethod3(); BaseMethod3();
: } }
把操作抽象化成物件, 操作可以繼承, 資料成員當然也可以繼承.
在父類別裡增加 protected 屬性(一連串操作)以提供子類別使用/修改:
std::vector< std::function<void()> > steps;
子類別中想增加操作只需要叫用 std::vector<T>::insert():
steps.insert(
steps.begin() + N,
[](){ /* ... */ }
);
live demo: http://ideone.com/C01TCT
用這招的話不管是遊戲還是遊戲編輯器都可執行時變來變去呢!
再搭配 Factory 生產不同操作集合, 類別間關係就可以更鬆綁.
--
≡≡≡≡╔═══╗╔═══╗ ◎ ╔═╗═╗╔═══╗╔═══╗╔╦═╦╗≡≡≡≡
≡金栽經║ ╔╗ ║║ ╔╗ ║╔╗║ ║ ║║ ═ ║║ ╔╗ ║║║ ║║RAINNOUS
≡≡≡≡║ ╚╝ ║║ ╚╝ ║║║║ ║║ ╞╣║ ║║ ║║ ║≡≡≡≡
≡≡≡≡║ ═╣║ ╥ ║║║║ ║ ║║ ═ ║║ ╚╝ ║║ ║ ║≡≡≡≡
≡高佑麗╚═╩═╝╚═╩═╝╚╝╚═╚═╝╚═══╝╚═══╝╚═╩═╝鄭允慧≡
≡≡≡≡≡趙賢榮≡≡≡金智淑≡≡≡RAINBOW≡≡≡盧 乙≡≡≡吳勝雅≡ψmocki
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.221.215
※ 編輯: loveme00835 來自: 140.121.221.215 (04/27 04:00)
--
※ 看板: xxxx9659 文章推薦值: 0 目前人氣: 0 累積人氣: 95
作者 loveme00835 的最新發文:
- 你指的應該是 C語言 Varadic Function, 但是它用法就跟 printf 一樣很麻煩. 接受任意個數引數 在 C++ 裡我們可以用寫好幾個重載函式來做這種事: // 一個參數, 2 種版 …
- 把操作抽象化成物件, 操作可以繼承, 資料成員當然也可以繼承. 在父類別裡增加 protected 屬性(一連串操作)以提供子類別使用/修改: std::vector< std::functio …
- YouTube 全場 (2012.08.25) Jae Kyung 재경 fancam @ Chuncheon World Leisure Games - YouTube by ksh850817 P …
- 有關在網路上傳得沸沸揚揚的新日單 KISS 發行預測, 是因為近一個月 以來成員們上傳的自拍圖中, 有的含有 KISS 的字樣, 有的則是作勢想 親粉絲. 所以有的粉絲認為這可能是在暗示下一個作品即為 …
- 裁經 想去美國黃石公園 黃石公園的超級活火山每64萬年的噴發一次週期已經逼近了 所以想用自己的雙眼鑑定這大火山噴發前的模樣還有用照 相機捕捉它的風采也想去非洲. 想目睹獅子捉著羚羊吃的樣子和在草原上 …
點此顯示更多發文記錄
→
guest
回列表(←)
分享