|
Программирование >> Дополнительные возможности наследования
Aucmuia 18.2. Исюиьзоовиио шаО виа массива 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 Sinclude <iostream.h> const int DefaultSize = 10; обычный класс Animal для создания массива животных class Animal { public: Animal(int); AnimalO; AnimalO { ) int GetWeightO const { return itsWeight; ) void DisplayO const { cout itsWeight; } private: int itsWeight; Animal::Animal(int weight): itsWeight(weight) Animal::Animal(): itsWeight(O) { > template <class T> объявляем шаблон и параметр class Array параметризованный класс public: конструкторы Array(int itsSize - DefaultSize); Array(const Array &rhs); ArrayO { delete [] pType; } операторы Array& operator=(const Array&); T& operator[](int offSet) { return pType[offSet]; } const T& operator[](int offSet) const { return pType[offSet]: } методы доступа int GetSizeO const { return itsSize; } private: T .pType; int itsSize; выполнения... выполняем конструктор template <class Т> Аггау<Т>::Array(int size): itsSize(size) { рТуре = new T[size]: for (int i = 0; i<size; i++) pType[i] = 0; > конструктор-копировщик template <class T> Array<T>::Array(const Array &rhs) itsSize = rhs.GetSizeO; pType = new T[itsSize]: for (int i = 0: i<itsSize: i++) pType[i] = rhs[i]; II оператор присваивания template <class T> Array<T>& Array<T>::operator=(oonst Array &rhs) { if (this == &rhs) return *this; delete [] pType; itsSize = rhs.GetSizeO; pType = new T[itsSize]; for (int i = 0; KitsSize; i++) pType[i] = rhs[i]; return this; > исполняемая программа int main() Array<int> theArray; массив целых Array<Animal> theZoo; массив животных Animal *pAnimal; заполняем массивы for-(int i = 0; i < theArray.GetSizeO; i++) { theArray[i] = i*2; pAnimal = new Animal(i*3); theZoo[i] = pAnimal: 100 101 102 103 104 105 106 107 108 109 110 111 112 113 delete pAnimal; выводим на печать содержимое массивов for (int ] = 0; j < theArray.GetSizeO; { cout theArrayL j ЗД f; cout theArray[j] Л t\ f; cout theZoo[ j JA t ; theZoo[j]. DisplayO; cout endl; return 0; резу1шт
В строках 8-26 вьшолняется создание класса Animal, благодаря которому объекты определяемого пользователем типа можно будет добавлять в массив. Содержимое строки 29 означает, что в следующих за ней строках объявляется шаблон, параметром для которого является тип, обозначенный идентификатором Т. Класс Array содержит два конструктора, причем первый конструктор принимает размер и по умолчанию устанавливает его равным значению целочисленной константы DefaultSize. Затем объявляются операторы присваивания и индексирования, причем объявляются константная и неконстантная версии оператора индексирования. В качестве единственного метода доступа служит функция GetSizeO, которая возвращает размер массива. Можно, конечно, представить себе и более полный интерфейс. Ведь для любой серьезной профаммы создания массива представленный здесь вариант будет недостаточным. Как минимум, пришлось бы добавить операторы, предназначенные для удаления элементов, для распаковки и упаковки массива и т.д. Все это предусмотрено классами контейнеров библиотеки STL, но к этому мы вернемся в конце занятия. Раздел закрытых данных содержит переменные-члены размера массива и указатель на массив объектов, реально помещенных в память. Щит набша Если вы хотите передать функции объект массива, нужно передавать конкретный экземпляр массива, а не шаблон. Поэтому, если некоторая функция Some Funct ion () принимает в качестве параметра целочисленный массив, используйте следующую запись; void SomeFunction(Array<int>&); правильно
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |