Язык программирования C++. Вводный курс




Определение шаблона класса


Предположим, что нам нужно определить класс, поддерживающий механизм очереди. Очередь– это структура данных для хранения коллекции объектов; они помещаются в конец очереди, а извлекаются из ее начала. Поведение очереди описывают аббревиатурой FIFO – “первым пришел, первым ушел”. (Определенный в стандартной библиотеке C++ тип, реализующий очередь,

упоминался в разделе 6.17. В этой главе мы создадим упрощенный тип для знакомства с шаблонами классов.)

Необходимо, чтобы наш класс Queue

поддерживал следующие операции:

·                  добавить элемент в конец очереди:

void add( item );

·                  удалить элемент из начала очереди:

item remove();

·                  определить, пуста ли очередь:

bool is_empty();

·                  определить, заполнена ли очередь:

bool is_full();

Определение Queue

могло бы выглядеть так:

class Queue {

public:

   Queue();

   ~Queue();

   Type& remove();

   void add( const Type & );

   bool is_empty();

   bool is_full();

private:

   // ...

};

Вопрос в том, какой тип использовать вместо Type? Предположим, что мы решили реализовать класс Queue, заменив Type на int. Тогда Queue

может управлять коллекциями объектов типа int. Если бы понадобилось поместить в очередь объект другого типа, то его пришлось бы преобразовать в тип int, если же это невозможно, компилятор выдаст сообщение об ошибке:

Queue qObj;

string str( "vivisection" );

qObj.add( 3.14159 );  // правильно: в очередь помещен объект 3

qObj.add( str );      // ошибка: нет преобразования из string в int

Поскольку любой объект в коллекции имеет тип int, то язык C++ гарантирует, что в очередь можно поместить либо значение типа int, либо значение, преобразуемое в такой тип. Это подходит, если предстоит работа с очередями объектов только типа int. Если же класс Queue




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