我理解虚拟继承的概念,但我无法找到这个问题的答案的任何地方。 假设你有一流的d它继承类B和C B和C类继承A.所以,你可以把B和C几乎继承,以避免A的两个实例,但你必须在B和C指定虚拟继承或者它已如果这两个中的一个虚拟继承A和其他不创建只有一个实例?
谢谢
我理解虚拟继承的概念,但我无法找到这个问题的答案的任何地方。 假设你有一流的d它继承类B和C B和C类继承A.所以,你可以把B和C几乎继承,以避免A的两个实例,但你必须在B和C指定虚拟继承或者它已如果这两个中的一个虚拟继承A和其他不创建只有一个实例?
谢谢
他们必须是virtual
。 从C ++ 11 10.1 [class.mi] / 7:
一个类可以有一个给定类型的虚拟和非虚拟基类。
class B { /* ... */ };
class X : virtual public B { /* ... */ };
class Y : virtual public B { /* ... */ };
class Z : public B { /* ... */ };
class AA : public X, public Y, public Z { /* ... */ };
对于类的对象AA
,基类的所有虚拟出现B
在的类晶格AA
对应于单个B
类型的对象内子对象AA
,和一个(非虚拟)基类的每一个其它存在B
在类的晶格AA
对应一个对一具有鲜明的B
类型的对象内的子对象AA
。 鉴于类AA
如上文所定义,类AA
具有类的两个子对象B
: Z
的B
和虚拟B
通过共享X
和Y
,如下所示。
你需要指定虚拟继承了B和C有一个A.否则未使用虚拟继承会“分享”类A的类
这可以使一个有以下几点:
为什么你想这样做又是另一回事。