
- •Введение в ооп
- •Алгоритмическое и объектно-ориентированное программирование
- •3.Основные понятия объектно-ориентированного программирования
- •4. Объекты и их атрибуты
- •5. Структура визуальной среды
- •4. Страж кода (Code Guard).
- •7. Синтаксис и семантика классов
- •8. Доступ к элементам класса (объекта)
- •9. Встраиваемые функции-элементы
- •10. Создание экземпляров класса. Конструктор
- •Создание объекта в динамической памяти
- •11. Уничтожение объектов класса. Деструктор
- •12. Статические компоненты класса
- •13. Постоянные и модифицируемые элементы-данные
- •14. Передача адреса объекта компонентной функции. Указатель this
- •15. Конструктор копии
- •16. Перегрузка функций и операций
- •17. Операция присваивания для объектов
- •18. Функции преобразования типа объекта
- •19. Наследование. Общие положения
- •Влияние ключа доступа при наследовании
- •20. Простое наследование
- •21. Множественное наследование
- •22. Виртуальное наследование
- •23. Виртуальные функции
- •24. Динамический полиморфизм
- •25. Абстрактные классы
- •26. Дружественные функции и классы
- •27. Шаблоны
- •28. Стандартная библиотека шаблонов. Общие положения
- •29. Примеры контейнеров
- •30. Обработка исключительных ситуаций. Общие положения
- •Синтаксис и семантика генерации и обработки исключительных ситуаций
- •32. Использование объекта класса для возврата параметров исключений
- •33. Ограничение перечня возбуждаемых исключительных ситуаций
- •34. Повторное возбуждение исключительной ситуации. Вложенные блоки try
- •35. Организация проектировани и документирования разработки объектно-ориентированных программ
- •1. Отображение классов.
- •2. Отображение отношений между классами
19. Наследование. Общие положения
Каждый объект является конкретным представителем класса. Объекты одного класса имеют разные имена, но одинаковые по типам и внутренним именам данные. Объектам одного класса доступны одинаковые компонентные функции класса и одинаковые операции, настроенные на работу с объектами класса. Таким образом, класс выступает в роли типа (прототипа), позволяющего создавать нужное количество однотипных объектов.
Заимствованная у природы идея наследования решает проблему модификации поведения объектов и придает ООП исключительную силу и гибкость. Наследование позволяет практически без ограничений последовательно строить и расширять классы, созданные вами или кем-то еще. Начиная с самых простых классов, можно создавать производные классы по возрастающей сложности, что не только облегчает отладку, но и упрощает внутреннюю структуру классов.
Последовательное проведение в жизнь принципа наследования, особенно при разработке крупных программных проектов, хорошо согласуется с техникой нисходящего структурного программирования ( от общего – к частному и во многом иллюстрирует такой подход. При этом сложность кода программы в целом существенно снижается. Производный класс (потомок) наследует все компонентные элементы базового класса (родителя) и всех его предшественников в иерархии классов.
При наследовании базовый класс «обрастает» новыми компонентными данными и функциями. Создавая модель предметной области, программист обычно подбирает наиболее подходящий класс для решения конкретной задачи и создает одного или нескольких потомков от него, которые приобретают способность делать не только то, что заложено в родителе. Дружественные функции позволяют производному классу получить доступ ко всем членам данных внешних классов.
Производный класс может наследовать элементы – данные и функции-элементы одного или нескольких базовых классов (основного или промежуточных). При этом функции-элементы могут быть переопределены (виртуальные функции) или перегружены в производном классе с целью изменения алгоритма поведения объекта производного класса относительно объектов базового класса.
В производном классе могут быть дополнительно объявлены данные и функции, расширяющие структуру объекта и его поведение.
Наследование может быть простым, множественным и виртуальным.
Синтаксис определения производного класса следующий:
class имя_производного_класса: [ ключ_доступа ] имя_базового_класса
{описание элементов производного класса };
Ключ доступа позволяет изменить статус наследуемых элементов базового класса с точки зрения их доступности в производном классе. Ключ доступа – это одно из трёх ключевых слов: private, protected или public.
Влияние ключа доступа при наследовании
Ключ доступа определяет то, как элементы базового класса наследуются производным классом.
а) Наследование открытых элементов (находятся в разделе public).
Если задан ключ доступа public, то все открытые члены базового класса остаются открытыми и в производном классе.
Если задан ключ доступа private, то все открытые элементы базового класса, оставаясь открытыми в базовом, в производном классе становятся закрытыми, но доступными для функций-элементов производного класса.
б) Наследование закрытых элементов.
В случае public закрытые элементы остаются в производном классе закрытыми от внешнего воздействия, доступными для функций-элементов базового класса, но недоступными для функций-элементов производного класса.
В случае private закрытые элементы остаются закрытыми для внешних функций и функций-элементов производных классов.
в) Наследование с ключом доступа protected.
Ключ доступа protected отличается от ключа доступа private тем, что закрытые элементы базового класса становятся доступными для всех классов, производных от базового класса. Вне базового класса и производных от него они недоступны.