Чтение онлайн

на главную - закладки

Жанры

Освой самостоятельно С++ за 21 день.

Либерти Джесс

Шрифт:

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

24: Enter an offset (0-9) and a value. (-1 to stop): 3 3

25: animal(int)

26: Destroyed an animal...

27: animal(int)

28: Destroyed an animal...

29: animal(int)

30: Destroyed an animal...

31: initArray. . .

32: [0] 0

33: [1] 1

34: [2] 2

35:

36: animal array

37: [0] 0

38: [1] 10

39: [2] 20

40:

41: Destroyed an animal...

42: Destroyed an animal...

43: Destroyed an animal...

Анализ:

В листинге 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.

Листинг 19.7. Использование статических переменных-членов и функций-членов с шаблонам

1: #include <iostream.h>

2:

3: const int DefaultSize = 3;

4:

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

6: class Animal

7: {

8: public:

9: // конструкторы

10: Animal(int);

11: Animal;

12: ~Animal;

13:

14: // методы доступа

15: int GetWeight const { return itsWeight: }

16: void SetWeight(int theWeight) { itsWeight = theWeight }

17:

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

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

20:

21: private:

22: int itsWeight;

23: };

24:

25: // оператор вывода обьектов типа Anlmal

26: ostream& operator<<

27: (ostream& theStream, const Animal& theAnimal)

28: {

29: theStream << theAnimal.GetWeight;

30: return theStream;

31: }

32:

33: Animal::Animal(int weight):

34: itsWeight(weight)

35: {

36: //cout << "animal(int) ";

37: }

38:

39: Animal::Animal:

40: itsWeight(0)

41: {

42: // cout << "animal ";

43: }

44:

45: Animal::~Animal

46: {

47: // cout << "Destroyed an animal...";

48: }

49:

50: template <class T> // объявляем шаблон и параметр

51: class Array // параметризованный класс

52: {

53: public:

54: // конструкторы

55: Array(int itsSize = DefaultSize);

56: Array(const Array &rhs);

57: ~Array { delete [] рТуре; itsNumberArrays-; }

58:

59: // операторы

60: Array& operator=(const Array&);

61: T& operator[](int offSet) { return pType[offSet]; }

62: const T& operator[](int offSet) const

Поделиться:
Популярные книги

Жатва душ. Несущий свет

Сугралинов Данияр
2. Жатва душ
Фантастика:
постапокалипсис
рпг
дорама
5.00
рейтинг книги
Жатва душ. Несущий свет

Измена. Право на счастье

Вирго Софи
1. Чем закончится измена
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на счастье

Антикиллер-2

Корецкий Данил Аркадьевич
2. Антикиллер
Детективы:
боевики
9.23
рейтинг книги
Антикиллер-2

Имя нам Легион. Том 5

Дорничев Дмитрий
5. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 5

Идеальный мир для Демонолога 4

Сапфир Олег
4. Демонолог
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Демонолога 4

Офицер империи

Земляной Андрей Борисович
2. Страж [Земляной]
Фантастика:
боевая фантастика
попаданцы
альтернативная история
6.50
рейтинг книги
Офицер империи

Вперед в прошлое 3

Ратманов Денис
3. Вперёд в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 3

Варрэн-Лин: Искра Стаи

Ариманта Юна
3. Варрэн-Лин
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Варрэн-Лин: Искра Стаи

Наследник

Шимохин Дмитрий
1. Старицкий
Приключения:
исторические приключения
5.00
рейтинг книги
Наследник

Неправильный солдат Забабашкин

Арх Максим
1. Неправильный солдат Забабашкин
Фантастика:
попаданцы
альтернативная история
5.62
рейтинг книги
Неправильный солдат Забабашкин

Мастер Разума IV

Кронос Александр
4. Мастер Разума
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер Разума IV

Золотой ворон

Сакавич Нора
5. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Золотой ворон

Барон переписывает правила

Ренгач Евгений
10. Закон сильного
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Барон переписывает правила

Первый среди равных. Книга IX

Бор Жорж
9. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных. Книга IX