Задачи
Множественное наследование
Создайте два класса с именами Mammals
(Млекопитающие) и MarineAnimals
(Морские животные). Создайте еще один класс с именем BlueWhale
(Синий кит), который наследует оба вышеперечисленных класса. Теперь создайте в каждом из этих классов функцию print
, которая печатает Я - млекопитающее
, Я - морское животное
и Я принадлежу к обеим категориям: Млекопитающие и Морские животные
соответственно. Теперь создайте объект для каждого из вышеперечисленных классов и продемонстрируйте вызов:
- функции
print
Mammals
экземпляра классаMammals
; - функции
print
MarineAnimals
экземпляра классаMarineAnimals
; - функции
print
BlueWhale
экземпляра классаBlueWhale
; - функции
print
родительских классовBlueWhale
экземпляра классаBlueWhale
.
Ромбовидное наследование
Ромбовидное наследование недаром получило название "ужасного бриллианта наследования", поскольку рассматриваемая проблема избыточности при передаче аргументов вызова конструкторам классов, выступающих в роли промежуточных производных классов, далеко не единственная. Одна из подобных проблем была затронута в связи с одиночным наследованием и ролью виртуальных деструкторов базовых классов. Ромбовидное наследование будет хорошо управляемым, если виртуальный базовый класс либо классы, производные непосредственно от него, являются абстрактными. Напомним, что класс становится абстрактным, если в нем объявляется хотя бы одна чисто виртуальная компонентная функция (например, деструктор).
Приведите пример открытого множественного наследования компонентов виртуального базового класса A_based
и двух прямых базовых классов B_derived
и C_derived
их производным классом D_derived
. В примере необходимо продемонстрировать:
- использование абстрактных классов;
- вызовы конструкторов и деструкторов классов с помощью сообщений в консоль;
- разрешение проблемы двойственности при одинаковых названиях функций в классах (в базовых классах объявлены функции с одним и тем же именем).