Кафедра 61
Контроль готовности обучающихся к учебному занятию
Контроль готовности обучающихся к учебному занятию
Контроль готовности обучающихся к учебному занятию
Контроль готовности обучающихся к учебному занятию
Контроль готовности обучающихся к учебному занятию
Контроль готовности обучающихся к учебному занятию
Контроль готовности обучающихся к учебному занятию
Контроль готовности обучающихся к учебному занятию
Классы
Учебный вопрос № 1
Создание шаблонов класса
Создание шаблонов класса
Создание шаблонов класса
Создание шаблонов класса
Создание шаблонов класса
Создание шаблонов класса
Создание шаблонов класса
Создание шаблонов класса
Создание шаблонов класса
Создание шаблонов класса
Создание шаблонов класса
Создание шаблонов класса
Создание шаблонов класса
Создание шаблонов класса
Создание шаблонов класса
Создание шаблонов класса
Создание шаблонов класса
Учебный вопрос № 2
Использование шаблонов класса
Использование шаблонов класса
Использование шаблонов класса
Специализация шаблонов класса
Специализация шаблонов класса
Специализация шаблонов класса
Задание на самостоятельную работу
1.56M

ЯП Тема 4 лекция 05

1. Кафедра 61

ВОЕННО-КОСМИЧЕСКАЯ АКАДЕМИЯ ИМЕНИ А.Ф. МОЖАЙСКОГО
Кафедра 61
Языки программирования
Лекция
Тема 4. Объектно-ориентированное программирование на языке
С++
Домбровский А.Ф.

2. Контроль готовности обучающихся к учебному занятию

Контрольный вопрос № 1:
Что такое класс?
2

3. Контроль готовности обучающихся к учебному занятию

Контрольный вопрос № 1:
Что такое класс?
Класс является
пользователем.
типом
данных,
определяемым
В классе задаются свойства и поведение какого-либо
предмета или процесса в виде полей данных
(аналогично структуре) и функций для работы с ними.
3

4. Контроль готовности обучающихся к учебному занятию

Контрольный вопрос № 2:
Что такое инкапсуляция?
4

5. Контроль готовности обучающихся к учебному занятию

Контрольный вопрос № 2:
Что такое инкапсуляция?
Объединение данных с функциями их
обработки в сочетании со скрытием ненужной
для использования этих данных информации
называется инкапсуляцией (encapsulation)
5

6. Контроль готовности обучающихся к учебному занятию

Контрольный вопрос № 3:
Что такое полиморфизм?
6

7. Контроль готовности обучающихся к учебному занятию

Контрольный вопрос № 3:
Что такое полиморфизм?
Полиморфизм – возможность использовать в
различных классах иерархии одно имя для
обозначения сходных по смыслу действий и
гибко выбирать требуемое действие во время
выполнения программы
7

8. Контроль готовности обучающихся к учебному занятию

Контрольный вопрос № 4:
Что такое наследование?
8

9. Контроль готовности обучающихся к учебному занятию

Контрольный вопрос № 4:
Что такое наследование?
Наследование – это возможность создания иерархии
классов, когда потомки наследуют все свойства своих
предков, могут их изменять и добавлять новые.
9

10. Классы

Лекция № 4.5. Шаблоны классов.
Цель занятия: изучить основы разработки и применения
шаблонов классов.
Учебные вопросы:
1. Создание шаблонов классов.
2. Использование шаблонов классов.
10
10

11. Учебный вопрос № 1

СОЗДАНИЕ ШАБЛОНОВ КЛАССА
11

12. Создание шаблонов класса

12
Параметризованный класс создает семейство родственных
классов, которые можно применять к любому типу данных,
передаваемому в качестве параметра.
Наиболее широкое применение шаблоны находят при создании
контейнерных классов.

13. Создание шаблонов класса

13
Контейнерным называется класс, который предназначен для
хранения каким-либо образом организованных данных и работы с
ними. Стандартная библиотека С++ содержит множество
контейнерных классов для организации структур данных различного
вида (они будут описаны в лекции «Контейнерные классы»).

14. Создание шаблонов класса

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

15. Создание шаблонов класса

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

16. Создание шаблонов класса

16
Поскольку этот класс будет описан внутри класса, представляющего
список, поля для простоты доступа из внешнего класса сделаны
доступными (public). Это позволяет обойтись без функций доступа и
изменения полей. Назовем класс списка LIST:

17. Создание шаблонов класса

17
Рассмотрим реализацию методов класса. Метод ADD выделяет память
под новый объект типа NODE и присоединяет его к списку, обновляя
указатели на его начало и конец:

18. Создание шаблонов класса

18
При желании получить отсортированный список этот метод можно
заменить на метод, аналогичный функции формирования
отсортированного списка ADD_SORT, приведенной в разделе
«Линейные списки» (тема 2). Метод FIND выполняет поиск узла с
заданным ключом и возвращает указатель на него в случае успешного
поиска и 0 в случае отсутствия такого узла в списке:

19. Создание шаблонов класса

19
Метод INSERT вставляет в список узел после узла с ключом KEY и
возвращает указатель на вставленный узел. Если такого узла в списке
нет, вставка не выполняется и возвращается значение 0:

20. Создание шаблонов класса

20
Метод INSERT вставляет в список узел после узла с ключом KEY и
возвращает указатель на вставленный узел. Если такого узла в списке
нет, вставка не выполняется и возвращается значение 0:

21. Создание шаблонов класса

21
Метод REMOVE удаляет узел с заданным ключом из списка и
возвращает значение true в случае успешного удаления и false, если
узел с таким ключом в списке не найден:

22. Создание шаблонов класса

22
Методы печати списка в прямом и обратном направлении поэлементно
просматривают список, переходя по соответствующим ссылкам:

23. Создание шаблонов класса

Деструктор списка освобождает память из-под всех его элементов:
23

24. Создание шаблонов класса

24
Программа формирует список из 5 чисел, выводит его на экран,
добавляет число в список, удаляет число из списка и снова выводит его
на экран:
Класс List предназначен для хранения целых чисел. Чтобы хранить в
нем данные любого типа, требуется описать этот класс как шаблон и
передать тип в качестве параметра.

25. Создание шаблонов класса

25
СИНТАКСИС ОПИСАНИЯ ШАБЛОНА:
TEMPLATE <ОПИСАНИЕ_ПАРАМЕТРОВ_ШАБЛОНА> ОПРЕДЕЛЕНИЕ_КЛАССА;
Параметры шаблона перечисляются через запятую. В качестве
параметров могут использоваться типы, шаблоны и переменные.
ТИПЫ могут быть как стандартными, так и определенными
пользователем. Для их описания используется ключевое слово CLASS.
Внутри шаблона параметр типа может применяться в любом месте, где
допустимо использовать спецификацию типа.

26. Создание шаблонов класса

26
Класс DATA можно рассматривать как формальный параметр, на место
которого при компиляции будет подставлен конкретный тип данных.

27. Создание шаблонов класса

27
Для любых параметров шаблона могут быть заданы значения по
умолчанию, например:

28. Создание шаблонов класса

28
ПРАВИЛА ОПИСАНИЯ ШАБЛОНОВ:
1. Локальные классы не могут содержать шаблоны в качестве своих
элементов.
2. Шаблоны методов не могут быть виртуальными.
3. Шаблоны классов могут содержать статические элементы,
дружественные функции и классы.
4. Шаблоны могут быть производными как от шаблонов, так и от
обычных классов, а также являться базовыми и для шаблонов, и
для обычных классов.
5. Внутри шаблона нельзя определять FRIEND-шаблоны.

29. Учебный вопрос № 2

ИСПОЛЬЗОВАНИЕ
ШАБЛОНОВ КЛАССА
29

30. Использование шаблонов класса

30
Чтобы создать при помощи шаблона конкретный объект конкретного
класса (этот процесс называется ИНСТАНЦИРОВАНИЕМ), при
описании объекта после имени шаблона в угловых скобках
перечисляются его аргументы:
Аргументы должны соответствовать параметрам шаблона. Имя
шаблона вместе с аргументами можно воспринимать как уточненное
имя класса. Примеры создания объектов по шаблонам, описанным в
предыдущем разделе:

31. Использование шаблонов класса

31
Если
параметром
шаблона
является
шаблон,
имеющий
СПЕЦИАЛИЗАЦИЮ, она учитывается при инстанцировании:

32. Использование шаблонов класса

32
После создания объектов с помощью шаблона с ними можно работать
так же, как с объектами обычных классов, например:
Для упрощения использования шаблонов классов можно применить
переименование типов с помощью TYPEDEF:

33. Специализация шаблонов класса

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

34. Специализация шаблонов класса

34
Для специализации метода требуется определить вариант его кода,
указав в заголовке конкретный тип данных.
Например, если заголовок обобщенного метода PRINT шаблона LIST
имеет вид:
специализированный метод для вывода списка символов будет выглядеть следующим образом:

35. Специализация шаблонов класса

35
При специализации целого класса после описания обобщенного
варианта класса помещается полное описание специализированного
класса, при этом требуется заново определить все его методы.
Допустим, требуется специализировать шаблон Block для хранения 100
целых величин:
При определении экземпляров шаблона Block с параметрами int и 100
будет задействован специализированный вариант.

36. Задание на самостоятельную работу

Задание:
1. Разработать и реализовать шаблоны классов в учебном проекте
«Анализатор протоколов».
Рекомендуемая литература:
1. С/С++. Программирование на языке высокого уровня / Т. А. Павловская.
2. Павловская Т. А., Щупак Ю. А. C/C++. Структурное и объектно-ориентированное программирование:
Практикум.
36
English     Русский Rules