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

19. Наследование. Общие положения

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

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

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

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

Производный класс может наследовать элементы – данные и функции-элементы одного или нескольких базовых классов (основного или промежуточных). При этом функции-элементы могут быть переопределены (виртуальные функции) или перегружены в производном классе с целью изменения алгоритма поведения объекта производного класса относительно объектов базового класса.

В производном классе могут быть дополнительно объявлены данные и функции, расширяющие структуру объекта и его поведение.

Наследование может быть простым, множественным и виртуальным.

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

class имя_производного_класса: [ ключ_доступа ] имя_базового_класса

{описание элементов производного класса };

Ключ доступа позволяет изменить статус наследуемых элементов базового класса с точки зрения их доступности в производном классе. Ключ доступа – это одно из трёх ключевых слов: private, protected или public.

Влияние ключа доступа при наследовании

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

а) Наследование открытых элементов (находятся в разделе public).

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

Если задан ключ доступа private, то все открытые элементы базового класса, оставаясь открытыми в базовом, в производном классе становятся закрытыми, но доступными для функций-элементов производного класса.

б) Наследование закрытых элементов.

В случае public закрытые элементы остаются в производном классе закрытыми от внешнего воздействия, доступными для функций-элементов базового класса, но недоступными для функций-элементов производного класса.

В случае private закрытые элементы остаются закрытыми для внешних функций и функций-элементов производных классов.

в) Наследование с ключом доступа protected.

Ключ доступа protected отличается от ключа доступа private тем, что закрытые элементы базового класса становятся доступными для всех классов, производных от базового класса. Вне базового класса и производных от него они недоступны.