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



             

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


Man miles ("Miles Davis", 60); // Отдельный Man

//====== Массив объектов класса Man

Man some [ ] =

{

Man("Count Basis", 70),

Man ("Duke Ellingtcnton", 90) ,

miles,

Man("Winton Marsales", 50) ,

};

а в функцию main ( ) добавить манипуляции с реальным вектором типа Man. В коде, который приведен ниже, обратите внимание на то, что при создании вектора men из четырех объектов класса Man вторым параметром передается адрес обычного массива объектов, инициализирующий все элементы (внутреннего для шаблона) массива data:

//====== Конструируем вектор объектов

//====== на основе массива объектов

Vector <Man> men (sizeof (some) /sizeof (Man) , some);

cout«"\nVector of Man: ";

//====== Вывод вектора

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

cout « men[i] « "; ";

В шаблоне классов могут быть объявлены static данные и функции. При этом следует иметь в виду, что каждый конкретный класс, образованный по шаблону,

будет иметь свои собственные копии static членов. Эти члены будут общими для всех объектов конкретного класса, но различными для всех классов — реализаций шаблона.

Параметры шаблона

При описании шаблона можно задать более одного параметра. Например:

template <class T, int size=256> class Stack {...};

Теперь при создании конкретной реализации класса можно задать размер стека

Stack <int, 2048>;

или

Stack <double, 8*N>;

Важно запомнить, что числовой параметр должен быть константой. В примере переменная N могла быть описана как const int N=1024; но не могла быть переменной int N=1024;. При создании конкретного класса по шаблону возможно вложенное определение класса, например, если был описан частный случай класса — шаблон структур вида:

template <class T> struct Buffer {...};

то после этого можно создать конкретную структуру, в качестве типа которой задать структуру, созданную по этому же шаблону, например:

Buffer <Buffer <int> > buf;




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