Шаблоны классов. Шаблон класса является заготовкой, из кото-
рой создаются конкретные классы в процессе инстанцирования (то есть
создания сущности, инстанции). Делается это путем подстановки кон-
кретного типа в качестве аргумента. Шаблон класса еще называют пара-
метризованным типом. Термин «параметризованный тип» эквивалентен
терминам «шаблон класса» и «шаблон». Синтаксис класса-шаблона
выглядит так:
template <параметры> // объявление шаблона
class имя_класса
{ // определение класса
};
Параметр-тип объявляется как
class имя или
typename имя
В проекте, состоящем из нескольких файлов, определение шаблона
класса обычно выносится в отдельный файл. Но для того, чтобы инстан-
цировался конкретный экземпляр шаблона класса необходимо, чтобы
определение шаблона находилось в одной единице трансляции с этим
экземпляром. Поэтому все определение шаблонного класса размещается
в заголовочном файле, а затем этот файл подключается к нужным файлам
с помощью директивы #include. Чтобы этот файл не включался повторно,
используется директива #ifndef.
При включении шаблона класса в программу никакие классы не
генерируются до тех пор, пока не будет создан экземпляр шаблонного
класса, в котором вместо параметра шаблона указывается конкретный
тип. Экземпляр создается либо объявлением объекта, либо объявлением
указателя на инстанцированный шаблонный тип с присваиванием ему
адреса с помощью операции new. Встретив такие объявления, компилятор
создает код исходного класса. Пример класса-шаблона:
60
template
class Array{
T & operator [] (int i)
{
rangecheck (i);
return data[i];
}
private:
T* data;
int size;
void rangecheck (int i) const
// проверка индекса
{
if (i >= size()) {throw std::range_error("Array - range!");}
}};
Компилятор подставит вместо T формальный параметр.
Array m;
Array d;
Достарыңызбен бөлісу: |