Читаем C++ для начинающих полностью

// определение Queue и его функций-членов

}

// объявление специализации

// cplusplus_primer::Queuechar*

template class cplusplus_primer::Queueprimer::Queuechar* и функции-члена remove() для класса cplusplus_primer::Queue находятся в глобальной области видимости. Поскольку такая область содержит пространство имен cplusplus_primer, а имена специализаций квалифицированы его именем, то определения специализаций для шаблона Queue вполне законны.

<p>16.13. Шаблон класса Array</p>

В этом разделе мы завершим реализацию шаблона класса Array, введенного в разделе 2.5 (этот шаблон будет распространен на одиночное наследование в разделе 18.3 и на множественное наследование в разделе 18.6). Так выглядит полный заголовочный файл:

#ifndef ARRAY_H

#define ARRAY_H

#include iostream

template class elemType class Array;

template class elemType ostream&

operator( ostream &, Array&elemType& & );

template class elemType

class Array {

public:

explicit Array( int sz = DefaultArraySize )

{ init( 0, sz ); }

Array( const elemType *ar, int sz )

{ init( ar, sz ); }

Array( const Array &iA )

{ init( iA._ia, iA._size ); }

~Array() { delete[] _ia; }

Array & operator=( const Array & );

int size() const { return _size; }

elemType& operator[]( int ix ) const

{ return _ia[ix]; }

ostream &print( ostream& os = cout ) const;

void grow();

void sort( int,int );

int find( elemType );

elemType min();

elemType max();

private:

void init( const elemType*, int );

void swap( int, int );

static const int DefaultArraySize = 12;

int _size;

elemType *_ia;

};

#endif

Код, общий для реализации всех трех конструкторов, вынесен в отдельную функцию-член init(). Поскольку она не должна напрямую вызываться пользователями шаблона класса Array, мы поместили ее в закрытую секцию:

template class elemType

void ArrayelemType::init( const elemType *array, int sz )

{

_size = sz;

_ia = new elemType[ _size ];

for ( int ix = 0; ix _size; ++ix )

if ( ! array )

_ia[ ix ] = 0;

else _ia[ ix ] = array[ ix ];

}

Реализация копирующего оператора присваивания не вызывает затруднений. Как отмечалось в разделе 14.7, в код включена защита от копирования объекта в самого себя:

template class elemType ArrayelemType&

ArrayelemType::operator=( const ArrayelemType&iA )

{

if ( this != &iA ) {

delete[] _ia;

init( iA._ia, iA._size );

}

return *this;

}

Функция-член print() отвечает за вывод объекта того типа, которым конкретизирован шаблон Array. Возможно, реализация несколько сложнее, чем необходимо, зато данные аккуратно размещаются на странице. Если экземпляр конкретизированного класса Array содержит элементы 3, 5, 8, 13 и 21, то выведены они будут так:

(5) 3, 5, 8, 13, 21

Оператор потокового вывода просто вызывает print(). Ниже приведена реализация обеих функций:

template class elemType ostream&

operator( ostream &os, Array&elemType& &ar )

{

return ar.print( os );

}

template class elemType

ostream & Array&elemType&::print( ostream &os ) const

{

const int lineLength = 12;

os "( " _size " ) ";

for ( int ix = 0; ix _size; ++ix )

{

if ( ix % lineLength == 0 && ix )

os "\n\t";

os _ia[ ix ];

// не выводить запятую за последним элементом в строке,

// а также за последним элементом массива

if ( ix % lineLength != lineLength-1 && ix != _size-1 )

os ", ";

}

os " \n";

return os;

}

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных