Как работает множественное наследование при использовании виртуального базового класса? Как мы знаем, когда и где мы должны использовать виртуальный базовый класс?Как работает множественное наследование при использовании виртуального базового класса?
Для получения следующего кода, как мы можем получить результат?
class A {
public:
A() {
cout<<"\t A";
}
};
class B: public A {
public:
B() {
cout<<"\t B";
}
};
class C: public B {
public:
C() {
cout<<"\t C";
}
};
class D: virtual C {
public:
D() {
cout<<"\t D";
}
};
class E: virtual C, virtual D {
public:
E() {
cout<<"\t E";
}
};
class F: public B, virtual E {
public:
F() {
cout<<"\t F";
}
};
int main() {
F obj;
}
Выход:
A B C D E A B F
Я получаю предупреждение [Предупреждение] прямая база 'B' недоступен в 'F' из-за неоднозначности [по умолчанию включено]
Как Я исправляю это ??
Я бы сначала рассмотреть редизайн –
Какой выход вы хотите получить? Как «исправить это» зависит от того, что вы пытаетесь выполнить. – interjay
Виртуальное наследование применяется только от уровня, который он впервые вводил. Так как ни 'C', ни' D' наследуют практически, вы все равно получаете дубликаты баз и двусмысленности, когда вы наследуете от обоих (даже практически). – StoryTeller