[問題] Virtual base class (diamond inheritance)

看板C_and_CPP (C/C++)作者 ( )時間16年前 (2009/03/13 01:21), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串1/1
C++ 新手 想問有關 Virtual base class 的問題 在所謂的 diamond inheritance 關係中 如果這樣 class Base {}; class Derived1 : public Base {}; class Derived2 : public Base {}; class Multi : public Derived1, public Derived2 {}; 以下這樣是不允許的 Base * ptr = new Multi; 一定要 宣告成virtual class Base {}; class Derived1 : virtual public Base {}; class Derived2 : virtual public Base {}; class Multi : public Derived1, public Derived2 {}; 但是為什麼? 網路上寫的的解釋我不是很能接受 說如果不宣告成 virtual base class 什麼這樣 Multi 會有兩個 Base 的 objects pointer ptr 不知道要指到哪一個! 這樣的解釋不知道是不是我誤會 但我不是很理解 當我 new 一個 Multi 的時候 不是就只有一個object 嗎 -- PLUR -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 85.180.24.118

03/13 01:38, , 1F
Base到Multi的路徑有兩條,不用virtual會有重複
03/13 01:38, 1F

03/13 01:39, , 2F
不過這種設計本身就很少見,大概只有iostream有用上
03/13 01:39, 2F

03/13 17:26, , 3F
是這樣沒錯 C++ Primer有提過
03/13 17:26, 3F
文章代碼(AID): #19kKIqtG (C_and_CPP)
文章代碼(AID): #19kKIqtG (C_and_CPP)