作者james732 (好人超)
看板C_and_CPP
標題Re: [問題] 想請教一個C++考題
時間Tue Jun 8 01:25:46 2010
說到 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