Re: [問題] 指定class中的成員函數
※ 引述《littletempo (小天普)》之銘言:
: 請教一下眾位高手
: 一個關於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種)。
: 想請教各位有沒有什麼方法可以達成呢?
: 感謝大家!!
如果你的程式不會很龐大的話, 可以考慮 switch + Enumeration 的作法
, 優點就是存取資料成員會比較方便, 但缺點是可能更新了列舉的數目但
swtich 裡的 case 並沒有做出對應的修改:
http://codepad.org/UiO1i4W3
想要比較好擴充的話, 可以選用「策略模式」, 不過相對應要付出比較多
的執行時間:
推文中 james732 大的程式碼略作修改
http://codepad.org/OPEIREGI
另外推文中 legnaleurc 大的方法, 我想實作起來應該像這樣:
http://codepad.org/3aA7eVmi
--
◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去
████◤ ██ ◢██◣█ ██ ████ ██ s ~> T-ara
█/███ ██ ██ ██ █/█ ◢███ █/█ 歡迎您的光臨
████◤ ██ ██ ██ ██◤ ███◤ ██◤ 恩靜、智妍、孝敏
█/███ ██ █/██◤ ██ █/██ ██ 素妍、居麗、寶藍
████◤ █◤ ◥██◤ █◤ ████◤█◤ 花英 ψmakigoto123
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
→
01/20 10:29, , 1F
01/20 10:29, 1F
→
01/20 10:31, , 2F
01/20 10:31, 2F
推
01/20 11:36, , 3F
01/20 11:36, 3F
推
01/20 14:06, , 4F
01/20 14:06, 4F
推
01/20 15:24, , 5F
01/20 15:24, 5F
→
01/20 16:05, , 6F
01/20 16:05, 6F
推
01/20 16:08, , 7F
01/20 16:08, 7F
推
01/20 16:52, , 8F
01/20 16:52, 8F
有沒有 C# 的 fu? XD
※ 編輯: loveme00835 來自: 140.121.197.115 (01/20 19:57)
推
01/21 10:00, , 9F
01/21 10:00, 9F
討論串 (同標題文章)