【发布时间】:2011-08-20 02:22:23
【问题描述】:
我有一个关于 c++ 中虚拟继承的问题:
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 继承 A 又像上面的代码一样使用 virtual public A 呢?
所以类型 A 的子对象的数量是 1 还是 2?
好的,谢谢您的回答,我明白了。但是我仍然将某些表达式与虚拟继承混淆了。 例如:
#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 ";
}
};
虚拟可以保证ATooB中只有一个A的副本吗?如果 AToo virtual 继承了 A,而 B 没有,会发生什么? ATooB 中有两个副本?所以这意味着 B 和 AToo 都应该虚拟继承 A 以便在 ATooB 中只保留一个副本?
【问题讨论】:
-
编辑了我的答案以供您编辑。
标签: c++ inheritance virtual