Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том1)" -> 63

Visual С++ 6. Полное руководство: В 2 т.(том1) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том1) — Бином, 2006. — 569 c.
Скачать (прямая ссылка): vicualcc2006t1.djvu
Предыдущая << 1 .. 57 58 59 60 61 62 < 63 > 64 65 66 67 68 69 .. 204 >> Следующая

После создания объекта и задания всех типов в списке параметров, компилятор автоматически обеспечивает работу с этими типами при последующем обращении к переменным-членам или вызове функций-членов класса. Таким образом, в объекте intList в метод Setitem нужно передать два значения типа int.
IntList.Setltem (0, 5); // первому элементу списка
// присваивается целое число
Чтобы создать объект для хранения списка строк, экземпляр CList можно определить так.
CList <char *, 25> StringList;
Тогда для присваивания строки какому-либо элементу списка следует в функции Setitem передать второму параметру указатель на массив типа char.
StringList.Setltem (0, "Mike"); // присваивает строку первому
// элементу списка
Объект для хранения списка значений типа double создается следующим образом.
CList <double, 25> *DoubleList; DoubleList = new CList <double, 25>;
Обратите внимание: при определении типа указателя DoubleList, так же как и при задании типа в операторе new, вместе с именем шаблона следует включить список его параметров <double, 25>. Список параметров шаблона является неотъемлемой частью определения типа. Одного имени шаблона недостаточно для представления типа, так как оно адресует семейство типов.
Можно создать объект для хранения структур, объединений или классов при условии, что они определены глобально, т.е. вне любой функции. Например, в следующем фрагменте создается объект для сохранения структур.
// определение структуры Record на глобальном уровне: struct Record {
char Name [25]; char Phone [15]; }
void main () {
// создание объекта для хранения списка, содержащего не более // 50 структур типа Record: CList <Record, 50> RecordList;
// создание и инициализация экземпляра структуры Record: Record Ree = {
"John" ,
" 287-981-0119 " );
// копирование содержимого объекта Rec в первый элемент списка: RecordList.Setltem (0, Rec) ;
// продолжение функции main . . . }
Совет
Как для шаблона функции, так и для функции-члена шаблона класса, компилятор не генерирует код до фактического вызова функции. Он генерирует различные версии кода для каждого объекта, которому соответствует уникальный набор параметров шаблона. Несмотря на это, можно использовать явное создание экземпляра, когда компилятор генерирует код для всех функций-членов класса или отдельных функций-членов без фактического вызова какой-либо функции-члена. Это удобно для создания файла библиотеки с расширением .lib, содержащего методы, сгенерированные из шаблонов классов. Информация о явном создании экземпляра шаблона приведена в следующих разделах справочной системы: Visual С++ Documentation, Reference, C/C++ Language and С++ Libraries, С++ Language Reference, Declarations, Template Specifications, Explicit Instantiation.
Включение
конструкторов в шаблон функции
Для инициализации элементов списка в шаблон CList следует добавить конструктор. Чтобы инициализировать массив Buffer, конструктор должен получить параметр типа т. (Конструктор не может просто инициализировать элементы массива Buffer стандартными значениями, например 0, так как ему не известен тип данных этих элементов.) Например, конструктор может быть объявлен в разделе public класса CList следующим образом.
// внутри раздела public класса CList: CList (Т InitValue);
Конструктор можно реализовать так.
template <class Т, int I> CList <T, I>::CList (T InitValue) {
for (int N = 0; N<I; ++N) Buffer [N] = InitValue; )
В другом варианте конструктор можно полностью описать внутри определения шаблона.
Обратите внимание, что список параметров шаблона [<Т, 1>) не включается, когда название CList следует за операцией расширения области видимости. (Разработчики языка С++, по-видимому, посчитали повторение списка параметров излишним.) С помощью такого конструктора можно создать объект для хранения целочисленных значений и одновременно инициализировать все элементы списка нулевыми значениями.
CList <int, 100> IntList (0);
Подобным образом в следующем фрагменте создается и инициализируется объект для хранения списка структур типа Record.
struct Record {
char Name char Phone };
// . . .
Record Ree = {"", ""} ;
CList <Record, 50> RecordList (Ree);
Во вновь созданном объекте каждый элемент списка является структурой Record, в обоих полях которой записаны нулевые (пустые) строки.
Определение класса CList может включать конструктор по умолчанию (т.е. конструктор без параметров), тогда объект может быть создан без инициализации списка. Вспомните, что если существует конструктор, имеющий один или более параметров, компилятор не генерирует автоматически конструктор по умолчанию. Однако в определение класса CList можно добавить пустой конструктор явно.
CList () О;
Деструктор для шаблона класса определяется с использованием синтаксиса, подобного синтаксису конструктора. Например, деструктор класса CList объявлен в определении шаблона как
-CList ();
и может быть реализован следующим образом.
template <class Т, int I> CList <T, I>::~CList () {
// код деструктора )
Предыдущая << 1 .. 57 58 59 60 61 62 < 63 > 64 65 66 67 68 69 .. 204 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100