Программирование >>  Дополнительные возможности наследования 

1 ... 194 195 196 [ 197 ] 198 199 200 ... 265


рТуре = new T[slze]; for (Int i = 0; Ksize; i++) pType[i] = 0;

конструктор-копировщик

template <class T>

Array<T>;;Array(const Array &rhs)

itsSize = rhs.GetSizeO; pType = new T[ltsSize]; for (int i = 0; KitsSize; 1++) pType[i] = rhs[l];

перегрузка опвратора присваивания (=) template <class T>

Array<T>& Array<T>::operator=(const Array &rhs) {

if (this == &rhs)

return this; delete [] pType; itsSize = rhs.GetSizeO; pType = new T[itsSize]; for (int 1 = 0; KitsSize; i++)

pType[i] = rhs[i]; return this;

int mainO {

bool Stop = false; признак для цикла

int offset, value; Array<int> theArray:

while (!Stop) {

cout Enter an offset (0-9) ;

cout and a value, (-1 to stop): ;

cin >> offset >> value;

if (offset < 0) break;

if (offset > 9)

cout << Please use values between 0 and 9. \ n

continue;



113 114 115 116 117 118 119

theArray[offset] = value;

cout << X nHeres the entire array;\ n cout << theArray << endl; return 0;

Enter

offset

(0-9)

value.

stop)

Enter

offset

(0-9)

value.

stop)

Enter

offset

(0-9)

value.

stop)

Enter

offset

(0-9)

value.

stop)

Enter

offset

(0-9)

value.

stop)

Enter

offset

(0-9)

value.

stop)

Enter

offset

(0-9)

value.

stop)

Enter

offset

(0-9)

value.

stop)

Enter

offset

(0-9)

value.

stop)

Enter

offset

(0-9)

value.

stop)

10 10

♦♦ Please use values between 0 and

Enter

offset

(0-9) and

value.

stop)

Heres the entire array;

[0] 0

[1] 10

[2] 20

[3] 30

[4] 40

[5] 50

[6] 60

[7] 70

[8] 80

[9] 90

В строке 42 объявляется шаблон функции operator () в качестве друга шаблона класса Array. Поскольку operator<<() реализован в виде функции шаблона, то каждый экземпляр этого типа параметризованного массива будет автоматически иметь функцию operator () для вывода данных соответствующего типа. Выполнение этого оператора начинается в строке 49. Каждый член массива вызывается по очереди. Этот метод работает только в том случае, если функция operator () определена для каждого типа объекта, сохраняемого в массиве.

Использование экземпляров шаблона

с экземплярами шаблона можно обращаться так же, как с любыми другими типами данных. Их можно передавать в функции как ссылки или как значения и возвращать как результат выполнения функции (тоже как ссылки или как значения). Способы передачи экземпляров шаблона показаны в листинге 19.5.



ДиЕШИиг 19.5. Передача в фуикции зкземияяра таВяоиа

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

dinclude <iostream.h> const int DefaultSize = 10;

Обычный класс, из объектов которого будет состоять массив

class Animal

public:

конструкторы Animal(int); AnimalO; AnimalO;

методы доступа

int GetWeightO const { return itsWeight; }

void SetWeight(int theWeight) { itsWeight = theWeight; }

дружественные операторы

friend ostream& operator<< (ostream&, const Animal&);

private;

int itsWeight;

/ оператор вывода обьектов типа Animal ostreamS, operator<<

(ostream& theStream, const Animal& theAnimal)

heStream theAnimal. GetWeightO; return theStream;

Animal::Animal(int weight): itsWeight(weight)

cout Animal(int)\ n ;

Animal: : AnimalO : itsWeight(O)

cout Animal0\ n ;

Animal: : AnimalO

cout << Destroyed an animal...\ n



1 ... 194 195 196 [ 197 ] 198 199 200 ... 265

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика