Оглавление
ВВЕДЕНИЕ_ 2
1 ПОСТАНОВКА ЗАДАЧИ_ 4
2 СРЕДСТВА ЯЗЫКА СИ++ ДЛЯ РЕАЛИЗАЦИИ ЗАДАЧИ_ 5
2.1 Объявление и использование классов в Си++_ 5
2.2 Перегрузка функций и операторов в Си++_ 10
2.3 Наследование в Си++_ 11
2.4 Файловый ввод-вывод в Си++_ 15
2.5 Шаблоны классов в Си++_ 16
3 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ_ 18
3.1 Классы и алгоритмы работы методов_ 18
3.2 Алгоритм работы главной программы_ 21
3.3 Описание структуры файла данных_ 22
4 ТЕСТИРОВАНИЕ ПРОГРАММЫ__ 24
ЗАКЛЮЧЕНИЕ_ 27
ЛИТЕРАТУРА_ 28
ПРИЛОЖЕНИЕ А_ 29
ПРИЛОЖЕНИЕ Б_ 30
ПРИЛОЖЕНИЕ В_ 31
ПРИЛОЖЕНИЕ Г_ 32
Здесь nmun является параметром-типом, который будет указан при создании объекта класса. При необходимости можно определить несколько типов, разделяя их запятыми.
После создания класса-шаблона можно создать конкретный объект этого класса, используя следующую общую форму:
имя_класса <тип> объект;
Тип – имя типа данных, с которым будет оперировать этот класс.
Функции-элементы класса-шаблона являются сами по себе автоматически шаблонами. Нет необходимости особым образом указывать на то, что они являются шаблонами с использованием ключевого слова template.
Простейшим примером служит определение минимума из двух величин. Если a меньше b то вернуть а, иначе - вернуть b
В отсутствие шаблонов программисту приходится писать отдельные функции для каждого используемого типа данных. Хотя многие языки программирования определяют встроенную функцию минимума для элементарных типов (таких как целые и вещественные числа), такая функция может понадобиться и для сложных (например «время» или «строка») и очень сложных объектов.
Для вызова шаблонной функции, необходимо указать значения для всех параметров шаблона. Для этого после имени шаблона указывается список значений в угловых скобках. Для каждого набора параметров компилятор генерирует новый экземпляр функции. Процесс создания нового экземпляра называется инстанцированием шаблона. В некоторых случаях компилятор может сам вывести (логически определить) значение параметра шаблона функции из аргумента функции.
В классе, реализующем связный список целых чисел, алгоритмы добавления нового элемента списка, поиска нужного элемента не зависят от того, что элементы списка — целые числа. Те же алгоритмы применялись бы и для списка символов, строк, дат, классов игроков, и так далее. Для использования шаблона класса, необходимо указать его параметры.
Параметрами шаблонов могут быть: параметры-типы, параметры обычных типов, параметры-шаблоны. Для параметров любого типа можно указывать значения по умолчанию. Если в шаблоне класса или функции необходимо использовать один и тот же шаблон, но с разными параметрами, то используются параметры-шаблоны. Нельзя использовать шаблоны функций в качестве параметров-шаблонов. Члены шаблона класса являются шаблонами, причём с той же, что и у шаблона класса, параметризацией. В частности это означает, что определение функций-членов следует начинать с заголовка шаблона. Внутри области видимости шаблона не нужно повторять спецификатор.