С++ для начинающих


         

Определение шаблона класса - часть 4


public:

   // ...

private:

   // Type представляет тип члена

   Type item;

   QueueItem *next;

};

В этом примере Type используется для обозначения типа члена item. По ходу выполнения программы вместо Type могут быть подставлены различные встроенные или определенные пользователем типы. Такой процесс подстановки называется конкретизацией шаблона.

Имя параметра шаблона можно употреблять после его объявления и до конца объявления или определения шаблона. Если в глобальной области видимости объявлена переменная с таким же именем, как у параметра шаблона, то это имя будет скрыто. В следующем примере тип item равен не double, а типу параметра:

typedef double Type;

template <class Type>

class QueueItem {

public:

   // ...

private:

   // тип Item - не double

   Type item;

   QueueItem *next;

};

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

template <class Type>

class QueueItem {

public:

   // ...

private:

   // ошибка: член не может иметь то же имя, что и

   //         параметр шаблона Type

   typedef double Type;

   Type item;

   QueueItem *next;

};

Имя параметра шаблона может встречаться в списке только один раз. Поэтому следующее объявление компилятор помечает как ошибку:

// ошибка: неправильное использование имени параметра шаблона Type

template <class Type, class Type>

   class container;

Такое имя разрешается повторно использовать в объявлениях или определениях других шаблонов:

// правильно: повторное использование имени Type в разных шаблонах

template <class Type>

   class QueueItem;

template <class Type>

   class Queue;

Имена параметров в опережающем объявлении и последующем определении одного и того же шаблона не обязаны совпадать. Например, все эти объявления QueueItem относятся к одному шаблону класса:

// все три объявления QueueItem

// относятся к одному и тому же шаблону класса

// объявления шаблона

template <class T> class QueueItem;




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