Читайте также:
|
|
Определения базовых классов должны предшествовать их использованию в качестве базовых. При множественном наследовании никакой класс не может больше одного раза использоваться в качестве непосредственного базового. Однако класс может больше одного раза быть непрямым базовым классом:
class X {...; f ();... };
class Y: public X {... };
class Z: public X {... };
class D: public Y, public Z {... };
В данном примере класс Х дважды опосредовано наследуется классом D. дублирование класса соответствует включению в производный объект нескольких объектов базового класса. В нашем примере существуют два объекта класса Х, и поэтому для устранения возможных неоднозначностей вне объектов класса D нужно обращаться к конкретному компоненту класса Х, используя полную квалификацию: D::Y::X::f() или D::Z::X::f(). Внутри объекта класса D обращения упрощаются Y::X::f() или Z::X::f(), но тоже содержат квалификацию.
Чтобы устранить дублирование объектов непрямого базового класса при множественном наследовании, этот базовый класс объявляют виртуальным. Для этого в списке базовых классов перед именем класса необходимо поместить ключевое слово virtual. Например, класс Х будет виртуальным базовым классом при таком описании:
class X {... f();... };
class Y: virtual public X {... };
class Z: virtual public X {... };
class D: public Y, public Z {... };
Дата добавления: 2015-10-02; просмотров: 68 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
При наследовании некоторые имена | | | При множественном наследовании один и тот же базовый класс может быть включен в производный класс одновременно несколько раз, причем и как виртуальный, и как не виртуальный. |