1 Программирование на языке Си++
2 Модуль 6. НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ Виртуальные функции и позднее связывание Множественное наследование Виртуальный базовый класс Чистые виртуальные функции и абстрактные классы
3 Понятие наследования в ООП и его реализация в Си++ (начало) Наследование механизм повторного использования определенных в составе классов компонентных данных и методов посредством порождения одних (производных) классов на основе других (базовых). Объединенные отношением наследования классы образуют иерархию наследования, чаще всего имеющую вид дерева Множественное наследование порождение производного класса от двух и более базовых. Применение множественного наследования превращает иерархию наследования из дерева в направленный ациклический граф Определение производного класса class : { } где содержит их имена, а также необязательные спецификаторы доступа к компонентам каждого класса Модуль 6. НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ
4 Понятие наследования в ООП и его реализация в Си++ (продолжение) Производному классу в языке Си++ доступны общедоступные ( public ) и защищенные ( protected ) компоненты базовых классов. С учетом вариантов спецификации доступа к компонентам базовых классов из производных, а также спецификации доступа в самих базовых классах, итоговая картина прав доступа имеет вид, показанный на следующем слайде При допустимом языком Си++ множественном наследовании возможно дублирование объектов непрямых базовых классов в составе общего предка. В тех случаях, когда такое дублирование нежелательно, базовый класс можно объявить виртуальным Модуль 6. НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ
5 Понятие наследования в ООП и его реализация в Си++ (окончание) Модуль 6. НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ
6 Множественное наследование. Виртуальные базовые классы Множественное наследование порождение класса- потомка от двух и более базовых классов Определение производного класса class : { }; При допустимом языком Си++ множественном наследовании возможно дублирование объектов непрямых базовых классов в составе общего предка. В тех случаях, когда такое дублирование нежелательно, базовый класс можно объявить виртуальным Модуль 6. НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ
7 Виртуальные, чистые виртуальные функции и абстрактные классы Для отражения в реализации иерархии классов ситуации, при которой одна и та же функция базового класса должна различным образом выполняться в классах-потомках, служат виртуальные функции. Классы, включающие виртуальные функции, называются полиморфными. Виртуальными могут быть только нестатические компонентные функции классов Компонентная виртуальная функция (базового) класса, не имеющего в данном классе реализации, называется чистой виртуальной функцией, а класс, содержащий хотя бы одну чистую виртуальную функцию, абстрактным Модуль 6. НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ
88 Список литературы [КР92] Керниган Б., Ритчи Д. Язык программирования Си / Пер. с англ. М.: Финансы и статистика, с. [КР06] Керниган Б., Ритчи Д. Язык программирования C / Пер. с англ. М.: Вильямс, с. [ЛЛ01] Липпман С., Лажойе Ж. Язык программирования C++. Вводный курс. СПб.: Невский диалект, с. [Под 03] Подбельский В.В. Язык Си++: Учеб. пособие. 5-е изд. М.: Финансы и статистика, – 560 с., ил. [Под 04] Подбельский В.В., Фомин С.С. Программирование на языке Си. – 2-е доп. изд. – М.: Финансы и статистика, – 600 с. [Стр 08] Страуструп Б. Язык программирования С++. Специальное издание. СПб.: Невский диалект, с.