假设我有这段代码:
如果
会有一个类型为
我仍然对一些虚拟继承的表达式感到困惑,例如:
class A {
};
class B: virtual public A {
};
class C: virtual public A {
};
class D: public B,public C, virtual public A {
};
如果
D
继承了 B
和 C
,虚拟继承可以确保 D
中只有一个 A
的副本;但是如果 D
再次使用 virtual public A
继承 A
,像上面的代码一样,会发生什么呢?会有一个类型为
A
的子对象,还是两个?
我仍然对一些虚拟继承的表达式感到困惑,例如:
#include <iostream>
using namespace std;
class A {
public:
A() {std::cout<<"A ";}
};
class B: A {
public:
B() {std::cout<<"B ";}
};
class AToo: virtual A {
public:
AToo() {
std::cout<<"AToo ";
}
};
class ATooB: virtual AToo, virtual B {
public:
ATooB() {
std::cout<<"ATooB ";
}
};
< p >虚拟关键字是否能够确保< code > A < / code >在< code > ATooB < / code >中只有一个副本?如果< code > AToo < / code >使用虚拟继承从< code > A < / code >继承,但是< code > B < / code >没有,那么会发生什么?< code > ATooB < / code >中会有两个副本吗?这是否意味着< code > B < / code >和< code > AToo < / code >都应该对< code > A < / code >使用虚拟继承以确保< code > ATooB < / code >只有一个副本?< / p>