Re: [問題] 想請教一個C++考題

看板C_and_CPP作者 (好人超)時間15年前 (2010/06/08 01:25), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串3/5 (看更多)
說到 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)

06/08 14:33, , 1F
推一個,C#這部份也跟java相同
06/08 14:33, 1F

06/08 19:55, , 2F
可以理解成 C++在constructor不會有多型這機制嗎?
06/08 19:55, 2F

06/08 19:57, , 3F
而C# java還是會去看你this實際上是指向什麼type??
06/08 19:57, 3F

06/08 20:00, , 4F
還有問下java 不加super();應該還是會自動跑吧??建構老爸
06/08 20:00, 4F
文章代碼(AID): #1C3IkTVJ (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1C3IkTVJ (C_and_CPP)