
- •Часть 2
- •Часть 2
- •Лабораторная работа №1 Тема: “Простейшие классы”
- •Основные понятия
- •Пример 1: Класс, описывающий окружность.
- •Пример 2: Класс, описывающий точку.
- •Пример 3: Класс, описывающий двумерный массив.
- •Задания для самостоятельного выполнения
- •Лабораторная работа №2 Тема: “Конструкторы и деструкторы”
- •Пример 1: Класс, описывающий животное.
- •Пример 2: Класс, описывающий время.
- •Пример 3: Класс, описывающий двумерный массив.
- •Задания для самостоятельного выполнения
- •Лабораторная работа №3 Тема: “Перегрузка операций”
- •Пример 1: Класс, описывающий окружность.
- •Пример 2: Класс, описывающий прямоугольник.
- •Пример 3: Класс, описывающий строку символов
- •Задания для самостоятельного выполнения
- •Лабораторная работа №4 Тема: “Классы динамических структур” Пример 1: Класс, описывающий двунаправленный список
- •Пример 2: Класс, описывающий бинарное дерево
- •Задания для самостоятельного выполнения
- •Лабораторная работа №5 Тема: “Шаблонные классы”
- •Пример : Класс, описывающий множество.
- •Задания для самостоятельного выполнения
- •Лабораторная работа №6 Тема: “Наследование”
- •Пример 1: Классы, описывающие точку, окружность и конус.
- •Задания для самостоятельного выполнения
- •Лабораторная работа №7 Тема: “Полиморфизм и виртуальные функции”
- •Пример : Классы, описывающие точки и окружности.
- •Задания для самостоятельного выполнения
- •Лабораторная работа №8 Тема: “Разреженные массивы” Пример: Класс, описывающий разреженный массив
- •Задания для самостоятельного выполнения
- •Лабораторная работа №9 Тема: “Виртуальные функции в динамических структурах” Пример: Класс, описывающий базовый класс списка и производный класс стека
- •Задания для самостоятельного выполнения
- •Лабораторная работа №10 Тема: “Вычисление выражений, вводимых с клавиатуры”
- •Пример: Шаблонный класс для вычисления значения выражения, вводимого с клавиатуры
- •Пошаговое выполнение программы
- •Задание для самостоятельного выполнения
Лабораторная работа №5 Тема: “Шаблонные классы”
Шаблонные классы предоставляют большие возможности, чем шаблонные функции. В таком классе определяются все его данные и функции, а фактические типы обрабатываемых данных задаются в качестве параметров позже, при создании объектов этого класса.
При создании шаблонных классов нужно обратить внимание на следующие возможности:
Шаблон типа необходимо задавать также при определении функции после имени класса, для которого эта функция определяется. Шаблон типа задается в угловых скобках;
При определении функции, ему должно в каждом случае предшествовать задание шаблонов типа со служебным словом template;
При создании объектов шаблонного класса после имени класса в угловых скобках задается конкретизация типа шаблона, то есть имя встроенного типа или типа пользователя, например:
Array <int> iar, *piar;
Array <double> dar, *pdar;
Дружественные функции также можно задавать в шаблонном классе по общим требованиям к дружественным функциям.
Для некоторых объектов шаблонный класс может не подойти. В таких случаях следует задавать реализацию различных функций для конкретного типа. Но лучше все-таки создавать шаблонные классы для объектов родственных типов, например, числовых, строковых, очередей, стеков и т. п.
Используя классы, можно определить новые типы данных. Например, в языке С++ отсутствует такой тип, как множество, но его легко реализовать с помощью шаблонного класса.
Рассмотрим понятие множество. Множество – это какой-то «черный ящик», в который можно поместить элемент данного множества, проверить его наличие в множестве, исключить какой-либо элемент из множества. Будем считать, что все элементы множества должны быть уникальны (т.е. могут входить во множество только 1 раз). Порядок следования элементов во множестве не имеет значения, однако мы будем создавать множества элементов, упорядоченных по возрастанию.
Множество является подмножеством другого множества, если в этом другом множестве можно найти все элементы, имеющиеся в первом подмножестве. Например, множество {A, B} является подмножеством множества {A, B, C}.
Для множеств определены следующие операции:
объединение множеств – это элементы, принадлежащие обоим множествам. Если A = {‘2’, ’4’, ’A’, ’B’, ’F’}, а B = {‘1’, ’4’, ’C’, ’B’, ’E’}, то A + B = {‘2’, ’4’, ’A’, ’B’, ’F’, ‘1’, ‘C’, ‘E’};
пересечение множеств – это те элементы, которые принадлежат одновременно обоим множествам A*B = {’4’, ’B’};
разность множеств – это исключение из левого множества элементов, которые имеются в правом A – B = {‘2’, ’A’, ’F’};
симметричная разность множеств – это набор элементов, которые входят только в одно из множеств (т.е. это объединение минус пересечение множеств): {‘2’, ’A’, ’F’, ‘1’, ‘C’, ‘E’}
для множеств могут быть определены операции сравнения ==, !=, >=, <=, а также операция определения принадлежности элемента данному множеству.