У меня вопрос о виртуальном наследовании в С++:
class A {
};
class B: virtual public A {
};
class C: virtual public A {
};
class D: public B,public C, virtual public A {
};
Если D наследует виртуальное наследование B и C, можно гарантировать наличие только одной копии A, содержащейся в D, но что относительно 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 ";
}
};
может ли виртуальная машина обеспечить только одну копию A в ATooB? если AToo virtual наследует A, но B не делает, что произойдет? две копии в ATooB? поэтому это означает, что и B, и AToo должны виртуально наследовать A, чтобы сохранить только одну копию внутри ATooB?