Хелпикс

Главная

Контакты

Случайная статья





Лабораторная работа № 7. Теоретическое описание.. template <список_параметров_шаблона>. определение_класса. имя_параметризованного_класса <фактические_параметры_шаблона>. имя_объекта (параметры_конструктора)



Лабораторная работа № 7

Шаблоны классов в C++

Теоретическое описание.

По аналогии с шаблонами функций можно определять и шаблоны семейства классов:

template <список_параметров_шаблона>

определение_класса

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

Определение шаблона может быть только глобальным.

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

Когда шаблон введен, появляется возможность определять конкретные объекты конкретных классов, каждый из которых параметрически порожден из шаблона. Формат определения объекта одного из классов, порождаемых шаблоном классов:

имя_параметризованного_класса <фактические_параметры_шаблона>

имя_объекта (параметры_конструктора)

В программе шаблон семейства классов с общим именем Vector используется для формирования двух классов с массивами целого и символьного типов. В соответствии с требованием синтаксиса имя параметризованного класса, определенное в шаблоне (в примере Vector), используется в программе только с последующим конкретным фактическим параметром (аргументом), заключенным в угловые скобки. Параметром может быть имя стандартного или определенного пользователем типа. В данном примере использованы стандартные типы int и char. Использовать имя Vector без указания фактического параметра шаблона нельзя – никакое умалчиваемое значение при этом не предусматривается.

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

Шаблон класса «вектор (одномерный массив) произвольного типа».

#include <iostream.h>

template <class T> //Т – параметр шаблона

class Vector

{

 T *data; //указатель на элементы массива

 int size; //количество элементов в массиве

public:

 Vector(int);

 ~Vector()

 {

delete[] data;

}

T& operator [](int i) //перегрузка операции []

{

return data[i];

}

 

};

template <class T>

Vector <T>::Vector(int n)

{

 data = new T[n];

size = n;

}

void main()

{

Vector <int> X(5); //объект класса «целочисленный вектор»

 

 Vector <char> C(5); //объект класса «символьный вектор»

 

 for (int i=0;i<5;i++)

{

X[i] = i;

C[i] = 'A'+i;

cout<<X[i]<<' '<<C[i]<<'\t';

 }

}

Результат:



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.