[問題] 關於繼承的問題
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: (題意請描述清楚)
是這樣的, 假如我要用 C++ 撰寫一個程式, 來代表...
任何一個動物, 可以有任何的能力
那, 假設我是這樣定義 class 的 :
class animal
class dog : public animal
class cat : public animal
class rat : public animal
class ability
class fly : public ability
class walk : public ability
class eat : public ability
那我應該怎麼樣定義 animal 和 ability 的關係 ?
如果我要在 runtime 動態的把 ability 加裝到 animal 上
我該怎麼做 ?
我的想法是 animal HAS-A ability
亦即 :
class ability;
class animal {
private:
ability * p_ability[MAX_ABILITIES];
};
但是假設我定義了一個 ability
class attack : public ability
這樣 ability 會存取到 animal 吧 ?
這樣就會有問題了吧 ?
怎麼樣讓 ability 能夠也去動到 animal class ?
class animal {
private:
ability * P_abilities[MAX_ABILITIES];
};
如果說要用 forward declaration, 像這樣 :
class animal;
class ability {
private:
animal * target;
};
class animal {
private:
ability * p_ability[MAX_ABILITIES];
};
雖然說這樣會 work, 但如果 ability 和 animal 分開在不同的 header 檔裡面的話
compiler 就會要求我要定義清楚 class 的名稱
( 意思就是 compiler 找不到兩個 class )
這樣我該怎麼辦 @@
我想要把 animal, 和 class 寫在不同的標頭檔裡面, 而且標頭檔裡面不要 include
另一個標頭檔
我該怎麼做 ?
請各位前輩大大們解惑 XD
我找這相關的資料找兩個禮拜有了 = =
設計模式也有看了... @@
希望得到的正確結果:
程式跑出來的錯誤結果:
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
有問題的code: (請善用置底文標色功能)
補充說明:
--
命運硬要踩,但我拒絕死掉
我就是小強
小強是我的命
但其實交配繁殖子孫無限才是重點
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.125.46.244
※ 編輯: maxiwill 來自: 59.125.46.244 (03/21 12:14)
→
03/21 22:25, , 1F
03/21 22:25, 1F
推
03/21 22:28, , 2F
03/21 22:28, 2F
→
03/21 22:29, , 3F
03/21 22:29, 3F
→
03/21 22:32, , 4F
03/21 22:32, 4F
→
03/21 23:51, , 5F
03/21 23:51, 5F
討論串 (同標題文章)