Кент Рейсдорф. BORLAND C++BUILDER. Раздел 1
Кент Рейсдорф. BORLAND C++BUILDER. Страница 89
: Airplane(_name, MILITARY) // вызов конструктора базового класса
{
// тело конструктора
}
Не забывайте вызывать конструктор базового класса всякий раз, когда вы создаете производный класс. На рис. 4.1 показан пример создания иерархии классов путем наследования.
Из рисунка 4.1 видно, что класс с именем F16 является производным от класса Military Fighter. В конечном счете, F16 происходит от Airplane, поскольку класс Airplane является базовым для всех остальных классов.
Создание класса на основе двух или более базовых классов называется множественным наследованием (multiple inheritance).
Множественное наследование применяется не часто, но оно может оказаться очень полезным. Пусть у вас есть класс Armaments, который отражает состав вооружения отдельного самолета. Он может выглядеть следующим образом:
Пусть теперь вам нужно создать класс для представления военного истребителя. Вы можете взять за основу классы MilitaryPlane и Armaments:
В результате вы получили класс, содержащий все открытые члены классов MilitaryPlane и Armaments. Теперь можно сделать следующее:
Два базовых класса объединены для образования одного производного класса.
Позвольте привести еще один пример. В Соединенных Штатах перевозку армейских подразделений осуществляет специальный авиаотряд MAC (Military Air Command). MAC является чем-то вроде собственной авиакомпании вооруженных сил. Поскольку военные — это в конечном счете груз, для их перевозки требуется военно-транспортный самолет. Но люди — это особый груз, и вы не можете просто бросить их в грузовой отсек (по крайней мере, не всегда). Поэтому вам необходим военно-транспортный самолет с чертами пассажирского авиалайнера. Вернемся обратно к рис. 4.1. Из него видно, что если произвести новый класс от классов MilitaryCargo и Airliner, мы получим то, что требуется. Это иллюстрирует рис. 4.2.