Top.Mail.Ru

Язык С++. ООП. Наследование

Наследование - создание нового класса на базе уже имеющегося, или базового класса. Принцип наследования состоит в том, что элементы данных  и методы базового класса автоматически становятся элементами данных нового класса.

Существуют два типа наследования:

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

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

  Формат описания класса при наследовании

 Class имя_класса_наследника:спецификатор_доступа  имя_базового_класса

{

собственные  данные;

собственные методы;

};

 Спецификатор доступа (private | protected | public) при объявлении производного класса определяет, какие элементы базового класса наследуются производным классом.

 Ограничение доступа для производных классов

Если производный класс наследует базовый с ключом:

  • private – все элементы унаследованные от базового класса скрываются для всех следующих потомков и рассматриваются как private текущего класса;
  • protected – разрешает последующим потомкам доступ к элементам protected, но закрывает для потомков public, превращая их в protected
  • public – права доступа к элементам базового класса определяются самим базовым классом, как для текущего, так и для всех других потомков;

  Конструкторы и деструкторы при наследовании

 Замечание: Если используются конструкторы с параметрами, то наследование должно быть с ключом public, чтобы можно было создать объекты произвольных классов.

 При создании конструктора производного класса:

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

  Деструкторы производного класса:

  • не имеют параметров
  • сначала вызывается деструктор производного класса, а затем базового
  • деструкторы вызываются в порядке, обратном вызовам конструкторов.

 Пример:  Создать производный класс VF  на основе базового класса Figura  с добавлением высоты геометрическим фигурам: круг, прямоугольник, трапеция, треугольник.  Предусмотреть методы для создания объектов, определения объема фигур. Дописать   предыдущую  программу,  демонстрирующую работу с этими классами.

Подведем итоги:

 1. Механизм наследования позволяет реализовать принцип эффективного программирования: написанный код можно многократно использовать. Методы базового или родительского класса могут использоваться объектами всех классов потомков.

 2. Наследование реализует принцип программирования от «простого к сложному» или от «общего к частному».  При этом базовый класс реализует только самые общие и простые методы, описывающие поведение всех объектов, а каждый производный класс лишь добавляет специфические особенности.