Какова будет последовательность наследования и что означает следующий код
class A
{
int a;
virtual void display()
{
cout<<"A";
}
}
class B
{
int b;
virtual void displayB()
{
cout<<"B";
}
}
class C:public B, virtual public B
{
}
Виртуальное наследование означает класс акции его базовый класс пример с любыми другими классами в иерархии экземпляра объекта, которые наследуются от него таким же образом (виртуально).
Не виртуальное наследование означает, что класс получает свой экземпляр базового класса, независимо от любых других классов, которые наследуются от базового класса.
Виртуальное наследование позволяет избежать циклов наследования. Например, это выдаст предупреждение:
class A {
public:
int count;
};
class B : public A {
};
class C : public B, public A {
};
дает:
prog.cpp:9: warning: direct base ‘A’ inaccessible in ‘C’ due to ambiguity
Потому что для C
наследство от A
неоднозначно (наследуется напрямую от A
но это также наследует от A
через B
).
Это скомпилируется без предупреждений:
class A {
public:
int count;
};
class B : virtual public A {
};
class C : public B, virtual public A {
};
Так как C
имеет только один общий экземпляр A
,