Информатика и технология программирования


Шаблоны


Достаточно часто встречаются классы, объекты которых должны содержать элементы данных произвольного типа (в том смысле, что их тип определяется отдельно для каждого конкретного объекта). В качестве примера можно привести любую структуру данных (массив указателей, массив, список, дерево). Для этого в Си++ предлагаются средства, позволяющие определить некоторое множество идентичных классов с параметризованным типом внутренних элементов. Они представляют собой особого вида заготовку класса (ШАБЛОН), в которой в виде параметра задан тип (класс) входящих в него внутренних элементов данных. При создании конкретного объекта необходимо дополнительно указать и конкретный тип внутренних элементов в качестве фактического параметра. Создание объекта сопровождается созданием соответствующего конкретного класса для типа, заданного в виде параметра. Принятый в Си++ способ определения множества классов с параметризованным внутренним типом данных (иначе, макроопределение) называется шаблоном ( template ).

Синтаксис шаблона рассмотрим на примере шаблона класса векторов, содержащих динамический массив указателей на переменные заданного типа.


//------------------------------------------------------bk73-11.cpp


// &#60class T&#62 - параметр шаблона - класс "T", внутренний тип данных


// vector - имя группы шаблонных классов


template &#60class T&#62 class vector
{
int tsize; // Общее количество элементов


int csize; // Текущее количество элементов


T **obj; // Массив указателей на параметризованные объекты


public: // типа "T"


T *operator[](int); // оператор [int] возвращает указатель на


// параметризованный объект класса "T"


void insert(T*); // включение указателя на объект типа "T"


int index(T*); //


};

Данный шаблон может использоваться для порождения объектов-векторов, каждый из которых хранит объекты определенного типа. Имя класса при этом составляется из имени шаблона " vector" и имени типа данных (класса), который подставляется вместо параметра "Т":




Начало  Назад  Вперед



Книжный магазин