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 好的,谢谢你的回答,我明白了。但是我还是把一些表达式和虚拟继承混

我对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

好的,谢谢你的回答,我明白了。但是我还是把一些表达式和虚拟继承混淆了。 例如:

#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

…对于指定的每个不同基类,最派生的对象 应包含该类型的单个基类子对象


是的,只有一个。

编辑了我的答案,以供您编辑。