[問題] 新手Overriding問題

作者: b90022790 (柚子拉拉)   2019-06-28 21:33:12
開發平台(Platform): (Ex: Win10, Linux, ...)
Linux
Ubuntu 16.04 LTS
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC
問題(Question):
版上的前輩大家好!我是剛畢業的高中生!最近大略讀過一遍原文螞蟻書的OOP部份,然而
OOP的實作經驗幾乎沒有,只有寫過螞蟻書的一些題目。
現在將以前的練習作業寫成OOP,目前遇到的這個問題讓我卡住很久。
後面會附上精減很多的CODE,想請各位前輩幫我看是不是哪個部份觀念錯誤!麻煩各位了
Skill是父類別,規範子類別需有use()
Fire繼承Skill,Override覆寫 use()
class Skill
{
public:
void use(){...A...}
}
class Fire : public Skill
{
public:
void use(){...B...}
}
我用一個新的類別Skill_List將擁有的skill串起來方便程式使用
class Skill_List()
{
public:
Skill_List(){
this->skill[0]=new Fire;
this->skill[1]=new Hide;
}
private:
Skill *skill[2]
}
然而欲使用skill[0]的use()時,執行的卻不是子類別Fire裡的use() B動作,而是父類別的A動作
我很困惑的是我儲存的列表明明是用指標存,但是為什麼會出現不屬於Fire類別的動作
Skill_List list;
list.skill[0]->use();
希望各位前輩能指點迷津,謝謝各位!!
作者: tony01111299 (tony01111299)   2019-06-28 21:41:00
Google 下 virtual function
作者: a731977 (卡哇邦卡)   2019-06-28 22:47:00
其實C++算有abstract, 就是virtual assign 0
作者: CarbonK (HTYISABUG)   2019-06-29 18:36:00
C++ abstract == pure virtual

Links booklink

Contact Us: admin [ a t ] ucptt.com