13  Множественное наследование

Построение производного класса на основе нескольких базовых выглядит очень просто: вместо имени одного базового класса (вместе с его атрибутом) используется список имен, разделенный запятыми, например:

class A { /*…*/ };

class B { /*…*/ };

class C: public A, private B { /*…*/ };

Передача аргументов конструкторам базовых классов из конструктора производного класса производится так же как и раньше:

С::С( int a, char* str) : A(a), B(str) { /*…*/ };

Язык C++ позволяет наследование не только от одного, а одновременно от нескольких классов. Такое наследование получило название множественного. При множественном наследовании производный класс включает произвольное количество базовых классов. Форма наследования в этом случае выглядит следующим образом:

class <имя производного класса>:

<вид наследования><имя базового класса 1>,

<вид наследования><имя базового класса 2>,

<вид наследования><имя базового класса п>{...};

Вид наследования определяет режим доступа к компонентам каждого из базовых классов. Базовые классы создаются в том порядке, в котором они перечислены в списке базовых классов при объявлении производного класса. Если конструкторы базовых классов не имеют аргументов, то производный класс может не иметь конструктора. При наличии у конструктора базового класса одного или нескольких аргументов каждый производный класс должен иметь конструктор. Чтобы передать аргументы в базовый класс, нужно определить их после объявления конструктора производного класса следующим образом:

<имя конструктора производного класса>(<список аргументов>):

<имя конструктора базового класса 1>(<список аргументов>),  ….

<имя конструктора базового класса n>(<список аргументов>)

{<тело конструктора производного класса>}

Список аргументов, ассоциированный с базовым классом, может состоять из констант, глобальных параметров и (или) параметров для конструктора производного класса.

Последовательность активизации конструкторов такая же, как и для случая единственного базового класса: сначала активизируются конструкторы всех базовых классов (в порядке их перечисления в объявлении производного класса), затем конструкторы объектных полей и в конце конструктор производного класса.

Hosted by uCoz