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>(<список
аргументов>)
{<тело конструктора производного класса>}
Список аргументов, ассоциированный с базовым классом, может
состоять из констант, глобальных параметров и (или) параметров для конструктора
производного класса.
Последовательность активизации конструкторов такая же, как и для случая единственного базового класса: сначала активизируются конструкторы всех базовых классов (в порядке их перечисления в объявлении производного класса), затем конструкторы объектных полей и в конце конструктор производного класса.