Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

CCPP / CPP / Программирование на языке Си++. Модуль №6

.pdf
Скачиваний:
60
Добавлен:
23.03.2016
Размер:
283.02 Кб
Скачать

Программирование

на языке Си++

1

Модуль 6.

НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ

Виртуальные функции и позднее связывание Множественное наследование Виртуальный базовый класс

Чистые виртуальные функции и абстрактные классы

2

Модуль 6. НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ

Понятие наследования в ООП и его реализация в Си++ (начало)

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

Множественное наследование — порождение производного класса от двух и более базовых. Применение множественного наследования превращает иерархию наследования из дерева в направленный ациклический граф

Определение производного класса

class <имя типа> : <список базовых классов> { <определение компонентов> }

где <список базовых классов> содержит их имена, а также необязательные спецификаторы доступа к компонентам каждого класса

3

Модуль 6. НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ

Понятие наследования в ООП и его реализация в Си++ (продолжение)

Производному классу в языке Си++ доступны общедоступные (public) и защищенные (protected)

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

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

виртуальным

4

Модуль 6. НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ

Понятие наследования в ООП и его реализация в Си++ (окончание)

Спецификатор в

Спецификатор в

Доступ в

списке базовых

теле базового

производном классе

классов

класса

 

 

 

 

не указан

private

недоступны

 

 

 

не указан

protected

private

 

 

 

не указан

public

private

 

 

 

private

private

недоступны

 

 

 

private

protected

private

 

 

 

private

public

private

 

 

 

protected

private

недоступны

 

 

 

protected

protected

protected

 

 

 

protected

public

protected

 

 

 

public

private

недоступны

 

 

 

public

protected

protected

 

 

 

public

public

protected

 

 

 

5

Модуль 6. НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ

Множественное наследование. Виртуальные базовые классы

Множественное наследование — порождение класса-

потомка от двух и более базовых классов

Определение производного класса

class <имя типа> : <список базовых классов> { <определение компонентов> };

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

виртуальным

6

Модуль 6. НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ

Виртуальные, чистые виртуальные функции и абстрактные классы

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

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

7

Список литературы

[КР92] Керниган Б., Ритчи Д. Язык программирования Си / Пер. с англ. — М.: Финансы и статистика, 1992. — 272 с.

[КР06] Керниган Б., Ритчи Д. Язык программирования C / Пер. с англ. — М.:

Вильямс, 2006. — 304 с.

[ЛЛ01] Липпман С., Лажойе Ж. Язык программирования C++. Вводный курс.

— СПб.: Невский диалект, 2001. — 1104 с.

[Под03] Подбельский В.В. Язык Си++: Учеб. пособие. — 5-е изд. — М.: Финансы и статистика, 2003. – 560 с., ил.

[Под04] Подбельский В.В., Фомин С.С. Программирование на языке Си. – 2-е доп. изд. – М.: Финансы и статистика, 2004. – 600 с.

[Стр08] Страуструп Б. Язык программирования С++. Специальное издание.

— СПб.: Невский диалект, 2008. — 1104 с.

8