[問題] 新手Overriding問題

看板C_and_CPP (C/C++)作者 (PomeloLaLa)時間6年前 (2019/06/28 21:33), 6年前編輯推噓3(300)
留言3則, 3人參與, 6年前最新討論串1/2 (看更多)
開發平台(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

06/28 21:41, 6年前 , 1F
Google 下 virtual function
06/28 21:41, 1F
謝謝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

06/28 22:47, 6年前 , 2F
其實C++算有abstract, 就是virtual assign 0
06/28 22:47, 2F

06/29 18:36, 6年前 , 3F
C++ abstract == pure virtual
06/29 18:36, 3F
文章代碼(AID): #1T5XSTk0 (C_and_CPP)
文章代碼(AID): #1T5XSTk0 (C_and_CPP)