[問題] 在父類別呼叫子類別所實作的 virtual function

看板C_and_CPP作者時間13年前 (2010/11/23 13:27), 編輯推噓2(203)
留言5則, 4人參與, 最新討論串1/1
直接看程式碼比較快: #include <iostream> using namespace std; class Parent { public: Parent() { init(); } virtual void init() { cout << "parent init" << endl; } }; class Child : public Parent { public: Child() : Parent() {} virtual void init() { cout << "child init" << endl; } }; int main() { Child child; return 0; } 原以為輸出結果應該是 child init, 但實際跑出來是 parent init, 以前寫 Java 常利用這一招來設計 event-handling 機制, 沒想到在 C++ 卻沒辦法使用, 很顯然 C++ virtual function 動態連結的方式跟我想的不一樣, 想請問有什麼方法可以克服這個問題? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.147.227.34

11/23 13:31, , 1F
請看16148推文,virtual對ctor無效
11/23 13:31, 1F

11/23 13:36, , 2F
原來如此,我原以為在非constructor也會有這種現象,謝謝!
11/23 13:36, 2F

11/23 13:42, , 3F
這個部份交給工廠來做吧
11/23 13:42, 3F

11/23 13:43, , 4F
補充一下,dtor也不行(0x行不行就不知了)
11/23 13:43, 4F

11/23 18:25, , 5F
應該一樣是不行 ... 在解構後子類的成員都蒸發掉了吧
11/23 18:25, 5F
文章代碼(AID): #1Cwr3NF4 (C_and_CPP)