C++ 什么是c++;
我对c++中的虚拟继承有一个问题:C++ 什么是c++;,c++,inheritance,virtual,C++,Inheritance,Virtual,我对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继承A吗 那么A型子对象的数量是1还是2 好的,谢谢你的回答,我明白了。但是我还是把一些表达式和虚拟继承混
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继承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 ";
}
};
#包括
使用名称空间std;
甲级{
公众:
A(){std::coutOne-这是virtual
继承的预期用途。只有一个A
的副本
实际上,您可以很容易地验证它。给A
一个成员并使用D
实例修改它。如果A
有多个副本,编译器会说访问不明确
编辑在已编辑的问题中,A将有两个副本。每次定期继承A
(无virtual
),都会生成A的新副本。如果您想要一个副本,请每次声明它virtual
。来自标准文档,10.1.4
…对于指定的每个不同基类,最派生的对象
应包含该类型的单个基类子对象
是的,只有一个。编辑了我的答案,以供您编辑。