what is virtual inheritance in c++

У меня вопрос о виртуальном наследовании в 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?

Хорошо, спасибо за ответы, я понимаю. Но я все еще путаю некоторые выражения с виртуальным наследованием. for example:

#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 ";
}
};

can the virtual can ensure only one copy of A in ATooB? if AToo virtual inherits A, but B does not, what will happen? two copies in ATooB? so this means both B and AToo should virtual inherit A in order to keep only one copy inside ATooB?

10
задан 6 May 2011 в 15:00
поделиться