Перейти к основному содержимому

Задачи

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

Создайте два класса с именами Mammals (Млекопитающие) и MarineAnimals (Морские животные). Создайте еще один класс с именем BlueWhale (Синий кит), который наследует оба вышеперечисленных класса. Теперь создайте в каждом из этих классов функцию print, которая печатает Я - млекопитающее, Я - морское животное и Я принадлежу к обеим категориям: Млекопитающие и Морские животные соответственно. Теперь создайте объект для каждого из вышеперечисленных классов и продемонстрируйте вызов:

  • функции print Mammals экземпляра класса Mammals;
  • функции print MarineAnimals экземпляра класса MarineAnimals;
  • функции print BlueWhale экземпляра класса BlueWhale;
  • функции print родительских классов BlueWhale экземпляра класса BlueWhale.

Ромбовидное наследование

Ромбовидное наследование недаром получило название "ужасного бриллианта наследования", поскольку рассматриваемая проблема избыточности при передаче аргументов вызова конструкторам классов, выступающих в роли промежуточных производных классов, далеко не единственная. Одна из подобных проблем была затронута в связи с одиночным наследованием и ролью виртуальных деструкторов базовых классов. Ромбовидное наследование будет хорошо управляемым, если виртуальный базовый класс либо классы, производные непосредственно от него, являются абстрактными. Напомним, что класс становится абстрактным, если в нем объявляется хотя бы одна чисто виртуальная компонентная функция (например, деструктор).

Приведите пример открытого множественного наследования компонентов виртуального базового класса A_based и двух прямых базовых классов B_derived и C_derived их производным классом D_derived. В примере необходимо продемонстрировать:

  • использование абстрактных классов;
  • вызовы конструкторов и деструкторов классов с помощью сообщений в консоль;
  • разрешение проблемы двойственности при одинаковых названиях функций в классах (в базовых классах объявлены функции с одним и тем же именем).