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

32. Шаблоны функций. Описание и использование

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

Для параметризации используется список формальных параметров шаблона, который заключается в скобки <>. Каждый формальный параметр шаблона обозначается служебным словом class, за которым следует имя параметра (идентификатор).

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

33.Шаблоны классов

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

Пусть, например, имеется класс типа стек, для хранения чисел типа int.

class Stack

{

private:

int st[max]; // целочисленный массив

int top; // индекс вершины стека

public:

Stack( ); // конструктор

void push(int var); // аргумент типа int

int pop( ); // возвращает значение типа int

};

Если теперь нужно будет хранить в стеке значения типа float, придется написать новый класс.

class Stack

{

private:

float st[max]; // массив

int top; // индекс вершины стека

public:

Stack( ); // конструктор

void push(float var); // аргумент типа float

float pop( ); // возвращает значение типа float

};

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

34. Стандартные шаблонные контейнерные классы. Основные методы.

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

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

35. Итераторы

Для работы с объектами контейнерного класса вводятся дополнительные классы, называемые итераторами. С помощью итераторов обеспечивается последовательный доступ ко всем составным частям контейнерного класса. Последовательность – это абстракция понятия “нечто такое, что мы можем перебирать от начала до конца, используя оператор получения следующего элемента” или “нечто такое, что мы можем перебирать от конца до начала, используя оператор получения предыдущего элемента”.