看板 C_and_CPP 關於我們 聯絡資訊
說到 constructor 不要呼叫 virtual function 的問題 最近才遇到一個 Java 與 C++ 行為很不一樣的範例 (難怪 Effective C++ 的作者有特別提到與 Java 的差異...可惜剛看書時候還不懂) http://nopaste.csie.org/08053 這是化簡後的 Java code 簡單的說,parent class 留下了 foo() 這個函式供 child 去 override 當 clild 的建構子呼叫 parent 的建構子,就會執行 child 提供的 foo() 在 Java 裡,這程式會輸出 OK http://nopaste.csie.org/bd5f7 改寫成 C++,直覺是寫成這個樣子 可是 C++ 在這裡永遠執行 parent 的 foo,因此只會印出 ERROR 遇到這問題的時候,還真的挺驚訝的 再翻開 Effective C++,才知道為什麼作者會寫 「在 Constructor 裡面,virtual function 不是 virtual function」了 (手邊沒書,不過應該是這個意思) -- 話說還有遇到另一個 Java 與 C++ 很不一樣的行為 可以參考隔壁的 #1BwwuMSS (java) 這篇文章 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.171.46 ※ 編輯: james732 來自: 140.117.171.46 (06/08 01:33)
dk3208:推一個,C#這部份也跟java相同 06/08 14:33
QQ29:可以理解成 C++在constructor不會有多型這機制嗎? 06/08 19:55
QQ29:而C# java還是會去看你this實際上是指向什麼type?? 06/08 19:57
QQ29:還有問下java 不加super();應該還是會自動跑吧??建構老爸 06/08 20:00