Рассмотрим на примере класса векторов. Данными этого класса являются массив координат, какой бы тип не имели элементы массива. Тип элемента задается как параметр шаблона. И для любого типа элементов определяются базовые операции.
Определение шаблона класса (как и функции) может быть только глобальным
// шаблон векторов
template<class T> // Т– параметр шаблона
class Vector // Vector- имя семейства классов
{T* data ; //данные класса
int size ; //размер пространства
public:
Vector(int); //конструктор
~Vector () { delete [ ]data; }// деструктор
//перегрузка операции “ [ ]”
T& operator [ ] ( int i) { return data[i];}
friend ostream & operator << ( ostream& , Vector <T> );
};
template<class T> // внешнее определение конструктора шаблона
Vector <T>:: Vector(int n)
{data = new T[n];
size =n;}
//определение перегрузки операции <<
ostream & operator << ( ostream& out , Vector <T> X)
{ out<<endl;
for( int i=0;i<X.size; i++)
out<<X[i]<<" "; return out;}
Теперь можно объявлять объекты конкретных классов, порожденных из шаблона
Имя параметризованного класса( шаблона) < фактические параметры шаблона>
имя объекта ( параметры конструктора);
т.е. имя конкретного класса будет:
Имя параметризованного класса( шаблона) < фактические параметры шаблона>
Vector<char> A( 5) ; //вектор – массив из пяти значений типа char
// здесь Vector <char> - имя класса