Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Включение конструкторов в шаблон функции

Для инициализации элементов списка в шаблон CList следует добавить конструктор. Чтобы инициализировать массив Buffer, конструктор должен получить параметр типа T. (Конструктор не может просто инициализировать элементы массива Buffer стандартными значениями, например 0, так как ему не известен тип данных этих элементов.) Например, конструктор может быть объявлен в разделе public класса CList следующим образом.

// внутри раздела public класса CList: CList (Т InitValue);

Конструктор можно реализовать так.

template <class Т, int I> CList <T, I>::CList (Т InitValue) { for (int N = 0; N<I; ++N) Buffer [N] = InitValue; }

В другом варианте конструктор можно полностью описать внутри определения шаблона.

Обратите внимание, что список параметров шаблона (< T, I >) не включается, когда название CList следует за операцией расширения области видимости. (Разработчики языка C++, по-видимому, посчитали повторение списка параметров излишним.) С помощью такого конструктора можно создать объект для хранения целочисленных значений и одновременно инициализировать все элементы списка нулевыми значениями.

CList <int, 100> IntList (0);

Подобным образом в следующем фрагменте создается и инициализируется объект для хранения списка структур типа Record.

struct Record { char Name [25]; char Phone [15]; };//...Record Rec = {"", ""};CList <Record, 50> RecordList (Rec);

Во вновь созданном объекте каждый элемент списка является структурой Record, в обоих полях которой записаны нулевые (пустые) строки.

Определение класса CList может включать конструктор по умолчанию (т.е. конструктор без параметров), тогда объект может быть создан без инициализации списка. Вспомните, что если существует конструктор, имеющий один или более параметров, компилятор не генерирует автоматически конструктор по умолчанию. Однако в определение класса CList можно добавить пустой конструктор явно.

CList (){};

Деструктор для шаблона класса определяется с использованием синтаксиса, подобного синтаксису конструктора. Например, деструктор класса CList объявлен в определении шаблона как

~CList ();

и может быть реализован следующим образом.

template <class Т, int I> CList <T, I>::~CList () { // код деструктора }

В листинге 6.1 приведено окончательное определение класса CList и его методов.

Листинг 6.1

// CList.h: файл заголовков шаблона класса CList template <class Т, int I> class CList{ public: CList () {}; CList (T InitValue); int Setltem (int Index, const Т SItem); int Getltem (int Index, Т &Item); private: Т Buffer [I];};template <class T, int I> CList <T, I>::CList (T InitValue){ for (int N = 0; N < I; ++N) Buffer [N] = InitValue;}template <class T, int I> int CList <T, I>::SetItem (int Index, const T &Item) { if (Index < 0 I I Index > I - 1) return 0; Buffer [Index] = Item; return 1; }template <class T, int I> int CList <T, I>::GetItem (int Index, T &ltem) { if (Index < 0 || Index > I - 1) return 0; Item = Buffer [Index]; return 1; }
<== предыдущая лекция | следующая лекция ==>
Создание объектов по шаблонам | Инициализация объединения
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 316; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.