16.1.1. Определения шаблонов классов Queue и QueueItem
16.1.1. Определения шаблонов классов Queue и QueueItem
Ниже представлено определение шаблона класса Queue. Оно помещено в заголовочный файл Queue.h вместе с определением шаблона QueueItem:
#ifndef QUEUE_H
#define QUEUE_H
// объявление QueueItem
template class T class QueueItem;
template class Type
class Queue {
public:
Queue() : front( 0 ), back ( 0 ) { }
~Queue();
Type& remove();
void add( const Type & );
bool is_empty() const {
return front == 0;
}
private:
QueueItemType *front;
QueueItemType *back;
};
#endif
При использовании имени Queue внутри определения шаблона класса Queue список параметров Type можно опускать. Однако пропуск списка параметров шаблона QueueItem в определении шаблона Queue недопустим. Так, объявление члена front является ошибкой:
template class Type
class Queue {
public:
// ...
private:
// ошибка: список параметров для QueueItem неизвестен
QueueItemType *front;
}
Упражнение 16.1
Найдите ошибочные объявления (или пары объявлений) шаблонов классов:
(a) template class Type
class Container1;
template class Type, int size
class Container1;
(b) template class T, U, class V
class Container2;
(c) template class C1, typename C2
class Container3 {};
(d) template typename myT, class myT
class Container4 {};
(e) template class Type, int *pi
class Container5;
(f) template class Type, int val = 0
class Container6;
template class T = complexdouble, int v
class Container6;
Упражнение 16.2
Следующее определение шаблона List некорректно. Как исправить ошибку?
template class elemenType
class ListItem;
template class elemType
class List {
public:
ListelemType()
: _at_front( 0 ), _at_end( 0 ), _current( 0 ), _size( 0 )
{}
ListelemType( const ListelemType & );
ListelemType& operator=( const ListelemType & );
~List();
void insert( ListItem *ptr, elemType value );
int remove( elemType value );
ListItem *find( elemType value );
void display( ostream &os = cout );
int size() { return _size; }
private:
ListItem *_at_front;
ListItem *_at_end;
ListItem *_current;
int _size
};
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Тела шаблонов
Тела шаблонов Шаблоны формируются по жестко заданным правилам. Они способны содержать элементы <xsl:param>, за которыми следует тело шаблона; в последнем могут содержаться данные PCDATA, инструкции XSLT, элементы расширения и элементы буквального
Создание шаблонов
Создание шаблонов При работе с корреспонденцией может возникнуть ситуация, когда в своих сообщениях вам придется неоднократно набирать повторяющийся текстовый фрагмент (простейший пример – приветствие и подпись). Согласитесь, в этом случае имеет смысл зафиксировать
6.5.8. Действие QUEUE
6.5.8. Действие QUEUE Действие QUEUE ставит пакет в очередь на обработку пользовательскому процессу. Оно может быть использовано для нужд учета, проксирования или дополнительной фильтрации пакетов.От переводчика: Далее автор пространно рассуждает о том, что обсуждение данной
Создание шаблонов
Создание шаблонов Если вам приходится много переписываться, очень скоро вы обнаружите, что вам надоело каждый раз писать «Доброе время суток!» в начале письма и «С искренними надеждами на плодотворное сотрудничество, Вассисуалий Апполинарович Иммануилов-Полесский» в
Работа с типом Queue
Работа с типом Queue Тип Queue (очередь) – это контейнер, гарантирующий размещение элементов по правилу "первым прибыл – первым обслужен". К сожалению, люди сталкиваются с очередями повсеместно: очереди в банке, кинотеатре, по утрам к автомату, продающему кофе, и т.д. При
Очередь (Queue)
Очередь (Queue) Любая последовательность, поддерживающая операции front, push_back и pop_front, может использоваться для модификации queue. В частности, могут использоваться list и deque.template ‹class Container›class queue { friend bool operator==(const queue‹Container›& х, const queue‹Container›& y); friend bool operator‹(const
Очередь с приоритетами (Priority queue)
Очередь с приоритетами (Priority queue) Любая последовательность, с итератором произвольного доступа и поддерживающая операции front, push_back и pop_front, может использоваться для модификации priority_queue. В частности, могут использоваться vector и deque.template ‹class Container, class Compare = less‹Container::value_type›
16.3. Функции-члены шаблонов классов
16.3. Функции-члены шаблонов классов Как и для обычных классов, функция-член шаблона класса может быть определена либо внутри определения шаблона (и тогда называется встроенной), либо вне его. Мы уже встречались со встроенными функциями-членами при рассмотрении шаблона Queue.
16.3.1. Функции-члены шаблонов Queue и QueueItem
16.3.1. Функции-члены шаблонов Queue и QueueItem Чтобы понять, как определяются и используются функции-члены шаблонов классов, продолжим изучение шаблонов Queue и QueueItem:template class Typeclass Queue {public:Queue() : front( 0 ), back ( 0 ) { }~Queue();Type& remove();void add( const Type & );bool is_empty() const {return front == 0;}private:QueueItem Type
16.4.1. Объявления друзей в шаблонах Queue и QueueItem
16.4.1. Объявления друзей в шаблонах Queue и QueueItem Поскольку QueueItem не предназначен для непосредственного использования в вызывающей программе, то объявление конструктора этого класса помещено в закрытую секцию шаблона. Теперь класс Queue необходимо объявить другом QueueItem, чтобы
16.6. Вложенные типы шаблонов классов
16.6. Вложенные типы шаблонов классов Шаблон класса QueueItem применяется только как вспомогательное средство для реализации Queue. Чтобы запретить любое другое использование, в шаблоне QueueItem имеется закрытый конструктор, позволяющий создавать объекты этого класса
16.9. Специализации шаблонов классов A
16.9. Специализации шаблонов классов A Прежде чем приступать к рассмотрению специализаций шаблонов классов и причин, по которым в них может возникнуть надобность, добавим в шаблон Queue функции-члены min() и max(). Они будут обходить все элементы очереди и искать среди них
16.10. Частичные специализации шаблонов классов A
16.10. Частичные специализации шаблонов классов A Если у шаблона класса есть несколько параметров, то можно специализировать его только для одного или нескольких аргументов, оставляя другие неспециализированными. Иными словами, допустимо написать шаблон, соответствующий
Использование шаблонов Word
Использование шаблонов Word Еще один инструмент упрощения ввода текста – шаблоны. Шаблон – это документ, который создают один раз и потом используют для создания других документов. Шаблоны представляют собой электронные бланки, в которых можно настроить все необходимые