作者b90022790 (PomeloLaLa)
看板C_and_CPP
標題[問題] 新手Overriding問題
時間Fri Jun 28 21:33:12 2019
開發平台(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();
希望各位前輩能指點迷津,謝謝各位!!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.168.131.128 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1561728797.A.B80.html
推 tony01111299: Google 下 virtual function 06/28 21:41
謝謝Tony大,太常寫php,指記得c++沒有abstract,interface,忘了有virtual的存在,我等等把書拿出來再翻一下
這部份!謝謝你!
※ 編輯: b90022790 (1.168.131.128 臺灣), 06/28/2019 21:46:08
※ 編輯: b90022790 (1.168.131.128 臺灣), 06/28/2019 22:25:14
推 a731977: 其實C++算有abstract, 就是virtual assign 0 06/28 22:47
推 CarbonK: C++ abstract == pure virtual 06/29 18:36