Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конструирование.doc
Скачиваний:
3
Добавлен:
22.08.2019
Размер:
182.78 Кб
Скачать

15 Наследование. Производные классы.

Наследование —позволяет описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом.

Наследование может быть одиночным (если производные классы имеют 1 родителя) и множественным. При множественном наследовании новый класс имеет более одного предка, при этом он наследует поведение и методы этих предков.

В С++ существует три типа наследования: public, protected, private. При public-наследовании все спецификаторы остаются без изменения. При protected-наследовании все спецификаторы остаются без изменения, кроме спецификатора public, который меняется на спецификатор protected (то есть public-члены базового класса в потомках становятся protected). При private-наследовании все спецификаторы меняются на private. Одним из основных преимуществ public-наследования является то, что указатель на классы—наследники может быть неявно преобразован в указатель на базовый класс.

При построении объектно-ориентированной программы одним из основных является вопрос иерархии классов. В иерархия классов можно:

-определить объект для заданного класса;

-построить новый класс, наследуя его из существующего класса;

-изменить поведение нового класса (изменить существующие и добавить новые функции).

Построение нового класса, наследуя его из существующего, предполагает:

-добавление в новый класс новых компонент-данных;

-добавление в новый класс новых компонент-функций;

-замену в новом классе наследуемых из старого класса компонент-функций;

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

Наследование называется простым, если производный класс имеет одного родителя. В C++ наследование может быть множественным.

Поскольку базовый класс ничего не знает про производные от него классы, его инициализация (вызов его конструктора) производится перед инициализацией (активизацией конструктора) производного класса.

В противоположность этому деструктор производного класса вызывается перед вызовом деструктора базового класса. Это объясняется тем, что уничтожение объекта базового класса влечет за собой уничтожение и объекта производного класса, следовательно, деструктор производного класса должен выполняться перед деструктором базового класса.

Производный (derived) класс - это расширение существу­ющего класса, называемого в этом случае базовым. Любой класс может быть использован в качестве базового и любой производный класс отражает описание базового класса.

Описание производного класса: class имя_производного_класса: имя_базового_класса {тело_произв._класса} [список_объектов], где ключевое_слово class может быть заменено на struct,при этом все атрибуты будут иметь доступ public. Объединение union не участвует в наследовании.

Конструкторы не наследуются - поэтому произв.класс должен иметь собств конструктор.

Если базовый класс является производным классом на более высоком уровне иерархии, то процесс вызова конструктора производится по своей цепи иерархии классов, пока не доберется до базового класса самого верхнего уровня иерархии. Таким образом, объекты базового класса всегда существуют в составе объектов производного класса.