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

1 ... 197 198 199 [ 200 ] 201 202 203 ... 265


124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165

int mainO {

Array<int> intArray; Array<Animal> animalArray; IntFillFunction(intArray); AnimalFillFunction(animalArray); cout intArray.. Л n intArray; cout \ nanimalArray...\ n animalArray endl; return 0;

void IntFillFunction(Array<int>& theArray) {

bool Stop = false; int offset, value; while (IStop) {

cout Enter an offset (0-9) and a value, ; cout (-1 to stop): ; cin offset >> value; if (offset < 0)

break; if (offset > 9) {

cout .**Please use values between 0 and 9.***\ n continue;

theArray[offset] = value:

>

void AnimalFillFunction(Array<Animal>& theArray) {

Animal * pAnimal;

for (int i = 0; KtheArray, GetSi2e(); i++) {

pAnimal = new Animal(i*10); theArray[i] = pAnimal; delete pAnimal;


примечание

Для облегчения анализа в приведенные ниже результаты работы программы добавлены номера строк, но в действительности они не выводятся.



1: animalO animal() animal() Enter an offset (0-9) and a value. (-1 to stop): 0 0 2:

Enter an offset (0-9) and a value. (-1 to stop.): 1 1 Enter an offset (0-9) and a value. (-1 to stop): 2 2 Enter an offset (0-9) and a value. (-1 to stop): 3 3 Enter an offset (0-9) and a value. (-1 to stop): -1 -1 ani(iial(int) Destroyed an animal. .. animal(int) Destroyed an

animal...animal(int) Destroyed an animal...InitArray.

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:

[0] 0 [1] 1 [2] 2

; animal array... : [0] 0 : [1] 10 ; [2] 20

: Destroyed an animal... Destroyed an animal... Destroyed an animal... : < Second run > : animal(int) Destroyed an animal. ; animal(int) Destroyed an animal. ; animal(int) Destroyed an animal.

Enter an offset (0-9) and Enter an offset (0-9) and Enter an offset (0-9) and Enter an offset (0-9) and animal(int) Destroyed an animal... animal(int)

Destroyed an animal... animal(int)

Destroyed an animal... initArray... [0] 0 [1] 1 [2] 2

animal array... [0] 0 [1] 10 [2] 20

Destroyed an animal... Destroyed an animal... Destroyed an animal...

value value value value

(-1 to stop): 0 0

(-1 to stop); 1 1

(-1 to stop); 2 2

(-1 to stop); 3 3

В листинге 19.6 оба класса воспроизведены во всей своей полноте, чтобы лучше наблюдать за созданием и удалением временных объектов Animal. Для упрошения результатов работы значение DefaultSize было уменьшено до 3.

Все конструкторы и деструкторы класса Animal (строки 33-48) выводят на экран сообшения, сигнализируюшие об их вызове.



в строках 74-81 объявляется конструктор класса Array. В строках 114-118 показан специализированный конструктор Array для массива объектов типа Animal. Обратите внимание, что в этом специализированном конструкторе не делается никаких явных присвоений и исходные значения для каждого объекта Animal устанавливаются стандартным конструктором.

При первом выполнении этой профаммы на экран выводится ряд сообщений. В строке 1 результатов выполнения программы зафиксированы сообщения трех стандартных конструкторов, вызванных при создании массива. Затем пользователь вводит четыре числа, которые помещаются в массив целых чисел.

После этого управление передается функции AnimalFillFunction(). Здесь в области динамического обмена создается временный объект Animal (строка 161), а его значение используется для модификации объекта Animal в массиве (строка 162). В следующей же строке (с номером 163) временный объект Animal удаляется. Этот процесс повторяется для каждого члена массива и отражен в строке 6 результатов выполнения профаммы.

В конце профаммы созданные массивы удаляются, а при вызове их деструкторов также удаляются и все их объекты. Процесс удаления отражен в строке 16 результатов выполнения профаммы.

При следующем выполнении профаммы (результаты показаны в строках 18-43) были закомментированы несколько строк профаммного кода (со 114 по 118), содержащие специализированный конструктор класса Array. В результате при выполнении профаммы для создания массива объектов Animal вызывается конструктор шаблона, показанный в строках 74-81.

Это приводит к созданию временных объектов Animal для каждого члена массива (строки профаммы 79 и 80), что отражается в строках 18-20 результатов выполнения профаммы.

Во всех остальных аспектах, результаты выполнения двух вариантов профаммы, как и следовало ожидать, идентичны.

Статические члены и шаОлоны

в шаблоне можно объявлять статические переменные-члены. В результате каждый экземпляр щаблона будет иметь собственный набор статических данных. Например, если добавить статическую переменную-член в шаблон Array (например, для подсчета количества созданных массивов), то в рассмотренной выше программе будут созданы две статические переменные-члена: одна для подсчета массивов объектов типа Animal и другая для массивов целых чисел. Добавление статической переменной-члена и статической функции в шаблон Array показано в листинге 19.7.

йиопиив 18.7. Исиояьзованив спвшичвских пврвмвккых-чявпвв и функциО-чявнвв о пвОнонвми

sinclude <iostream.h> const Int DefaultSize = 3;

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

public:



1 ... 197 198 199 [ 200 ] 201 202 203 ... 265

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