Учебник по Visual C++ .Net



             

Шаблоны классов - часть 2


r = с;

}

//====== Метод для вычисления площади круга

double area ()

{

return 3.14159*r*r;

}

};

//====== Глобальное определение нового типа

//====== указателя на функцию

typedef double (*Tfunc) (double);

//====== Тестирование ч

void main ()

{

//===== Генерируется вектор целых

Vector <int> x(5) ;

for ( int i=0; i < x.SizeO; ++i)

{

x[i] = i; // Инициализация

cout « x[i] « ' ' ; // Вывод

}

cout « ' \n ' ;

//===== Генерируется вектор вещественных Vector <float> y(10);

for (i=0; i < y.SizeO; ++i)

{

y[i] = float (i); // Инициализация cout « y[i] « ' ' ; // Вывод

}

cout « ' \n' ;

//==== Генерируется вектор объектов класса Circle

Vector <Circle> z(4);

for (i=0; i< z.SizeO; ++i) // Инициализация

z[i] = Circle(i+100,i + 100,i+20) ;

cout « z[i].area() « " "; // Вывод

}

cout « ' \n' ;

//==== Генерируется вектор указателей на функции

Vector <Tfunc> f(3);

cout«"\nVector of function pointers: " ;

f[0] = sqrt; // Инициализация

f[l] = sin;

f[2] = tan;

for (i=0; i< f.Size(); ++i)

cout « f[i](3.) « ' '; // Вывод cout « "\n\n";

}

Обратите внимание на синтаксис внешней реализации тела конструктора шаблона классов. Vector<T> — это имя шаблона, a Vector (int n) — имя метода шаблона (конструктор). При использовании шаблона для генерации конкретного вектора объектов необходимо задать в угловых скобках тип данных, известный к этому моменту и видимый в этой области программы. Использование шаблона всегда предполагает наличие описателя типа при имени класса (Vector <type>). Имя Vector теперь не может быть использовано без указания конкретного типа элементов.

В рассмотренном примере операция [ ] определена в шаблоне как общая для всех типов Т, однако метоД area () определен только для объектов класса Circle и он применяется к объекту z [i] класса circle, вектор из четырех элементов которого автоматически создается компилятором при объявлении Vector <circle> z (4);. Работая с вектором указателей на функции, мы в цикле по переменой i вызываем i-ю функцию и посылаем ей в качестве аргумента вещественное число 3 (см. вызов f [i] (3.) ).




Содержание  Назад  Вперед