оператором return, создателем языка Бьерном Страуструпом был изначально назван шаблоном функции. Данный термин отражает, что мы имеем дело с определенным видом шаблона, отличающимся от шаблонов классов, о которых речь пойдет ниже. Сегодня многие авторы используют вместо этого выражение шаблонная функция (template funcion), потому что шаблоны указанного типа очень похожи на обычные функции. В этой книге мы также будем использовать термин шаблонная функция, а иногда даже просто функция для обозначения этих шаблонов. То же относится и к обсуждаемому ниже понятию, которое изначально получило наименование шаблон класса, а в книге зовется шаблонным классом (template class) или просто классом.
Шаблонные классы
Мы можем использовать тип как параметр (Гв предыдущем примере) для классов почти так же, как и для функций. Предположим, нам нужен класс Pair, чтобы хранить пары значений. Иногда оба значения принадлежат к типу double, иногда к типу int. Тогда вместо двух новых классов, к примеру,
class PairDouble { public:
PairDouble(double xl, double yl): x(xl), y(yl) {}
void showQ(); private:
double x, y; };
void PairDouble::showQ() { cout << x/y << endl; }
после чего следует аналогичный фрагмент с классом Pairlnt, нам достаточно написать один шаблонный класс:
II cltempl.cpp: Шаблонный класс. #include <iostream.h>
template <class T> class Pair { public:
Pair(T xl, Tyl): x(xl), y(yl){}
void showQ(); private:
T x, y; };
template <class T>
void Pair<T>::showQ() { cout << x/y << endl; }
int main()
{ Pair<double> a(37.0, 5.0);
Pair<int> u(37, 5);
a.showQ();
u.showQ();
return 0; }
Способ, каким функции-члены шаблонного класса, в этом примере showQ, определены вне класса, может с первого взгляда показаться сложным. Но на самом деле эта конструкция весьма логична: имя любой функции-члена, когда эта функция определяется вне класса, должно быть предварено выражением
type::
и вполне резонно, что вместо type в нашем случае мы пишем Pair<T>. Кроме того, как пользователи STL мы можем не беспокоиться об определениях, так как шаблонные классы STL доступны в виде файлов заголовков, которые можно использовать, не вдаваясь в подробности их программирования
<< назад вперед >>