Читайте также:
|
|
class X {... };
class Y: virtual public X {... };
class Z: virtual public X {... };
class B: virtual public X {... };
class C: virtual public X {... };
class E: public X {... };
class D: public X {... };
class A: public D, public B, public Y, public Z, public C, public E {... };
В данном примере объект класса А включает три экземпляра объектов класса Х: один виртуальный, совместно используемый классами B, Y, C, Z, и два не виртуальных относящихся соответственно к классам D и E. Таким образом, можно констатировать, что виртуальность класса в иерархии производных классов является не свойством класса как такового, а результатом особенностей процедуры наследования.
Возможны и другие комбинации виртуальных и невиртуальных базовых классов. Например:
class BB {... };
class AA: virtual public BB {... };
class CC: virtual public BB {... };
class DD: public AA, public CC, public virtual BB {... };
При использовании наследования и множественного наследования могут возникать неоднозначности при доступе к одноименным компонентам разных базовых классов. Простейший и самый надежный способ устранения неоднозначностей - использование квалифицированных имен компонентов. Как обычно, для квалификации имени компонента используется имя класса. Следующий пример иллюстрирует упомянутую неоднозначность и ее разрешение с помощью квалификационных имен компонентов:
class X { public: int d;... };
class Y { public: int d;... };
class Z: public X, public Y
{ public:
Int d;
...
d=X::d + Y::d;
...
};
Дата добавления: 2015-10-02; просмотров: 44 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Наличие нескольких прямых базовых классов называют множественным наследованием. | | | Абстрактные классы |