[問題] 指定class中的成員函數

看板C_and_CPP作者 (小天普)時間15年前 (2011/01/19 22:57), 編輯推噓4(405)
留言9則, 4人參與, 最新討論串1/3 (看更多)
請教一下眾位高手 一個關於class中成員函數的問題 假如我今天想要定義一個 戰士(warrior) 作 攻擊(attack) 與 移動(move) (以下code皆為想像,意會用,並不符合syntax) 寫了一個Warrior class class Warrior { void Warrior(); void attack(); void move(); } 此時 attack 與 move 並沒有定義如何實作 這些函數的定義是寫在其他地方的 attack可能有很多種 ex: 1. 射箭(bow) 2. 用矛刺(spear) 3. 用斧劈(axe) move也可能很多種 ex: 1. 跑(run) 2. 跳(jump) 3. 走(walk) 有沒有可能在初始 Warrior 時才告訴他應該怎麼做 例如像這樣: Warrior Jack(bow, run); Jack.attack(); // Jack 射箭 Jack.move(); // Jack 跑 如果上面可以辦到 更進一步,是否在執行程式中改變行為,例如: Jack.move = jump Jack.move(); // Jack 跳 這樣子的要求不太可能用單純的Virtual與繼承作 例如 class RunBowWarrior : public Warrior{} 因為如果變化很多就要寫很多種derived class了(例如上例9種)。 想請教各位有沒有什麼方法可以達成呢? 感謝大家!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.20.143

01/19 23:02, , 1F
Design Patterns : 策略模式
01/19 23:02, 1F

01/19 23:16, , 2F
大概是這種味道:http://nopaste.csie.org/36006
01/19 23:16, 2F

01/19 23:16, , 3F
(上面的程式有memory leak問題,不過我懶得改)
01/19 23:16, 3F

01/19 23:30, , 4F
給它一個 functor
01/19 23:30, 4F

01/19 23:34, , 5F
唔,functor好像比我上面寫的還要好
01/19 23:34, 5F

01/19 23:40, , 6F
Functor + Enumeration 也不錯, 不過同樣有存取資料的
01/19 23:40, 6F

01/19 23:40, , 7F
問題, 委派時參數要多傳些
01/19 23:40, 7F

01/20 00:46, , 8F
後來想到 switch + Enumeration 就夠用了, 不用繼承
01/20 00:46, 8F

01/20 11:17, , 9F
感謝樓上眾多高手! XD
01/20 11:17, 9F
※ 編輯: littletempo 來自: 140.112.217.49 (01/20 11:18)
文章代碼(AID): #1DDllF0c (C_and_CPP)
文章代碼(AID): #1DDllF0c (C_and_CPP)