看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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 ≡≡║ ╚╝ ║║ ╚╝ ║║║║ ║║ ╞╣║ ║║ ║║ ║ ═╣║ ╥ ║║║║ ║ ║║ ═ ║║ ╚╝ ║║ ║ ║ 高佑麗╚═╩═╝╚═╩═╝╚╝╚═╚═╝╚═══╝╚═══╝╚═╩═╝鄭允慧 趙賢榮金智淑盧 乙吳勝雅ψmocki -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.221.215 ※ 編輯: loveme00835 來自: 140.121.221.215 (04/27 04:00)
xxxx9659:這招好高端 先學起來 說不定過幾年後 我可能會用到... 05/01 03:36