C++ Программирование в среде С++ Builder 5



             

Создание представителей шаблона


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

// Шаблон класса. template <ciass T, int О class TmplClass { ... };

// Создание представителей шаблонных классов.

TmplClass<long, 100> IClassObj;

TmplClass<float, 40> *fClassPtr;

fClassPtr = new TmplClass<float, 40>;

После того, как представитель шаблонного класса создан, с ним можно обращаться точно так же, как с любым объектом, принадлежащим к обыч-

ному классу. Ниже показан пример программы, использующей определение шаблона из листинга 10.2.

Листинг 10.3. Создание и использование представителя шаблонного класса

///////////////////////////////////////////////

// Usetmpl.cpp: Использование шаблона класса. //

#include <iostream.h>

#pragma hdrstop

#include <condefs.h>

#include "Deftmpl.h"

// Включить определение шаблона.

// Класс записей, для которого будет создан шаблонный класс. class Record {

char str[41] ;

public:

Record(void) { str[0] = 0; }

void Set(const char *s)

{ strncpy(str, s, 40);}

char *Get(void)

{ return str; } };

#pragma argsused

int main(int argc, char* argv[])

{

const int NumRec = 4;

DataBase<Record, NumRec> db; // Объявление объекта

// с 4-мя записями.

// Инициализация массива.

db.RecO .Set("First string.");

db.Rec().Set("Second string.");

db.RecO .Set("Third string.");

db.Rec().Set("Fourth string.");

cout.setf(ios::boolalpha);

// Чтение с попыткой выхода за пределы массива.

db.Rec(O); // Позиционирование на 0.

for (int i=0; i<=NumRec; i++) {

cout << db.RecO .Get() << " Error: ";

cout << db.Error() << endl;

} cout << endl;

// Чтение с прямым указанием индекса.




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