作者easy1 ( )
看板C_and_CPP
标题[问题] Virtual base class (diamond inheritance)
时间Fri Mar 13 01:21:54 2009
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
1F:推 legnaleurc:Base到Multi的路径有两条,不用virtual会有重复 03/13 01:38
2F:→ legnaleurc:不过这种设计本身就很少见,大概只有iostream有用上 03/13 01:39
3F:推 hylkevin:是这样没错 C++ Primer有提过 03/13 17:26