Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PP_laba13.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
71.2 Кб
Скачать

Министерство общего и профессионального образования Ростовской области

Государственное бюджетное образовательное учреждение среднего профессионального образования Ростовской Области

«Таганрогский колледж морского приборостроения»

МДК.01.02 Прикладное программирование

Методические рекомендации

по выполнению лабораторной работы № 13

«Шаблоны»

Время выполнения работы – 4 часа

Таганрог

2016

    1. Цель работы

Получение навыков в разработке программ с использованием шаблонов классов.

2 Техническое обеспечение

    1. Персональная ЭВМ IBM PC/486 и более поздних моделей.

    2. Клавиатура.

    3. Дисплей.

    4. Печатающее устройство.

3 Программное обеспечение

3.1 Операционная система Windows XP и более поздние версии.

3.2 Система программирования Visual C++ версия 6.0 и более поздние версии.

4 Постановка задачи

Выполнить задание согласно варианта, приведенного в разделе 6 настоящих методических указаний.

  1. Общие сведения

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

  • используя в качестве элемента контейнера указатель void *;

  • на основе шаблона класса, в котором тип элементов задается параметром шаблона.

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

5.1 Шаблоны классов

Шаблон класса является заготовкой, из которой создаются конкретные классы в процессе инстанцирования (то есть создания сущности, инстанции). Делается это путем подстановки конкретного типа в качестве аргумента. Шаблон класса еще называют параметризованным типом. Термин «параметризованный тип» эквивалентен терминам «шаблон класса» и «шаблон».

Синтаксис класса-шаблона выглядит так:

template <параметры> // объявление шаблона

class имя_класса

{ // определение класса

};

Префикс template <параметры> показывает компилятору, что следующее определе­ние класса является шаблоном, а не обычным классом. Шаблоном может быть и структура. Как и имя обычного класса, имя класса-шаблона не должно совпа­дать с другими именами в одной области видимости. Параметры шаблона могут быть следующих видов:

  • параметр-тип;

  • параметр целочисленного или перечислимого типа;

  • параметр-указатель на объект или указатель на функцию;

  • параметр-ссылка на объект или ссылка на функцию;

  • параметр-указатель на член класса.

К целочисленным типам относятся все целые, символьные и булевский (bool) типы. Нельзя использовать в качестве параметра ни один из встроенных дроб­ных типов  ни float, ни double, ни long double. Параметры шаблона, если их не­сколько, записываются через запятую. Все виды параметров, кроме параметра-типа, пишутся обычным образом (как в функциях), например:

long р, int (*f)(double), int *t, const char *s

Имена параметров видимы в пределах всего шаблона, поэтому внутренние для шаблона имена должны быть разными.

Параметр-тип является наиболее часто используемым и объявляется как

class имя

или

typename имя

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

Шаблон структуры-пары с двумя полями разного типа можно определить разными способами:

template <class T1, class T2>

struct Pair { Tl first; T2 second; };

template <typename T1, typename T2>

struct Pair { T1 first; T2 second; };

template <class T1, typename T>

struct Pair { T1 first; T second; };

Шаблон, как и обычный класс, можно объявить. Объявление состоит из заголов­ка шаблона и не включает в себя тело класса, например:

template <typename Т> class Stack;

template <typename T1, typename T2> struct Pair;

template <class T> class Array;

Определение объектов для некоторого класса-шаблона в общем виде выглядит так:

имя_класса_шаблона <аргументы> имя_объекта; // одиночный объект

имя_класса_шаблона <аргументы> имя_объекта[количество]; //массив

имя_класса_шаблона <аргументы> *имя_обьекта; // указатель

Или для случая константной ссылки в качестве параметра:

const имя_класса_шаблона <аргументы> &имя_объекта;

В угловых скобках на месте параметров при объявлении объектов задают кон­кретные аргументы. Параметры шаблона являются позиционными (как и аргу­менты функции), поэтому подставляемое фактическое значение должно соответ­ствовать виду параметра шаблона: если на данном месте в определении класса-шаблона находился параметр-тип, то и аргумент должен быть типом или клас­сом. Например, определение конкретных объектов-пар может быть таким:

Pair <int, int> х;

Pair <int, double> у;

Pair <string, date> d;

В качестве аргумента-типа можно использовать и класс-шаблон, например:

Pair <Pair <int, long>, float> pair;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]