Помощь в написании студенческих работ
Антистрессовый сервис

Множественное наследование. 
Реализация динамического полиморфизма

РефератПомощь в написанииУзнать стоимостьмоей работы

В С++ класс может наследовать свойства более, чем одного класса. Формат определения наследования классом свойств нескольких базовых классов аналогичен формату определения наследования свойств отдельного класса: Конструкторы вызовутся в порядке: Base1, Base2, Base3, Base4. Добавление в конструктор для Derived конкретных вызовов с другим порядком и повторение программы не изменит сообщения… Читать ещё >

Множественное наследование. Реализация динамического полиморфизма (реферат, курсовая, диплом, контрольная)

В С++ класс может наследовать свойства более, чем одного класса. Формат определения наследования классом свойств нескольких базовых классов аналогичен формату определения наследования свойств отдельного класса:

Class Subclass: public Base1, private Base2.

{//остальная часть определения класса.

}.

В определении может быть перечислено любое число базовых классов, через запятую. Ни один базовый класс не может быть прямо унаследован более одного раза. Каждый базовый класс может быть унаследован как public или как private; умолчанием является private.

Когда класс наследует свойства только одного-единственного класса, последовательность выполнения конструкторов не является жестко заданной. С переходом к множественному наследованию порядок выполнения конструкторов стал очень важен:

  • 1) Конструкторы всех виртуальных базовых классов; если их более одного, то конструкторы вызываются в порядке их наследования;
  • 2) Конструкторы невиртуальных базовых классов в порядке их наследования;
  • 3) Конструкторы всех компонентных классов.

#include.

struct Base1.

{Base1(){cout<<" Создание Base1″ <

};

struct Base2.

{Base2(){cout<<" Создание Base2″ <

};

struct Base3.

{Base3(){cout<<" Создание Base3″ <

};

struct Base4.

{Base4(){cout<<" Создание Base4″ <

};

struct Derived: private Base1, private Base2, private Base3.

{Base4 anObject;

Derived (){};

};

void main ().

{ Derived anObject;

}.

Конструкторы вызовутся в порядке: Base1, Base2, Base3, Base4. Добавление в конструктор для Derived конкретных вызовов с другим порядком и повторение программы не изменит сообщения на выходе этой программы. Например:

struct Derived: private Base1, private Base2, private Base3.

{Base4 anObject;

Derived (): anObject (), Base3(), Base2(), Base1() {};

};

void main ().

{ Derived anObject;

}.

Только изменение порядка наследования классов изменит последовательность появления сообщений на выходе программы.

Последовательность вызова деструкторов будет обратной последовательности вызовов конструкторов.

Показать весь текст
Заполнить форму текущей работой