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

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

Жанры

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

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

Шрифт:

Листинг 18.4. Использование оператора вывода

1: #include <iostream.h>

2:

3: const int DefaultSize = 10;

4:

5: class Animal

6: {

7: public:

8: Animal(int);

9: Animal;

10: ~Animal { }

11: int GetWeight const { return itsWeight; }

12: void Display const { cout << itsWeight; }

13: private:

14: int itsWeight;

15: };

16:

17: Animal::Animal(int weight):

18: itsWeight(weight)

19: { }

20:

21: Animal::Animal:

22: itsWeight(0)

23: { }

24:

25: template <class T> //

объявляем шаблон и параметр

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

27: {

28: public:

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

30: Array(int itsSize = DefaultSize);

31: Array(const Array &rhs);

32: ~Array { delete [] pType; }

33:

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

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

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

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

38: { return pType[offSet]; }

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

40: int GetSize const { return itsSize; }

41:

42: friend ostream& operator<< (ostream&, Array<T>&);

43:

44: private:

45: T *pType;

46: int itsSize;

47: };

48:

49: template <class T>

50: ostream& operator<< (ostream& output, Array<T>& theArray)

51: {

52: for (int i = 0; i<theArray.GetSize; i++)

53: output << "[" << i << "] " << theArray[i] << endl; return output;

54: }

55:

56: // Ряд выполнений...

57:

58: // выполнение конструктора

59: template <class T>

60: Array<T>::Array(int size):

61: itsSize(size)

62: {

63: pType = new T[size];

64: for (int i = 0; i<size; i++)

65: pType[i] = 0;

66: }

67:

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

69: template <class T>

70: Array<T>::Array(const Array &rhs)

71: {

72: itsSize = rhs.GetSize;

73: pType = new T[itsSize];

74: for (int i = 0; i<itsSize; i++)

75: pType[i] = rhs[i];

76: }

77:

78: // перегрузка оператора присваивания (=)

79: template <class T>

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

81: {

82: if (this == &rhs)

83: return *this;

84: delete [] pType;

85: itsSize = rhs.GetSize;

86: pType = new T[itsSize];

87: for (int i = 0; i<itsSize; i++)

88: pType[i] = rhs[i];

89: return *this;

90: }

91:

92: int main

93: {

94: bool Stop = false; //

признак для цикла

95: int offset, value;

96: Array<int> theArray;

97:

98: while (!Stop)

99: {

100: cout << "Enter an offset (0-9) ";

101: cout << "and a value. (-1 to stop): ";

102: cin >> offset >> value;

103:

104: if (offset < 0)

105: break;

106:

107: if (offset > 9)

108: {

109: cout << "***Please use values between 0 and 9.***\n";

110: continue;

111: }

112:

113: theArray[offset] = value;

114: }

115:

116: cout << "\nHere's the entire array:\n";

117: cout << theArray << endl;

118: return 0;

119: }

Результат:

Enter an offset (0 -9 and а value. (-1 to stop) 1 10

Enter an offset (0 -9 and а value. (-1 to stop) 2 20

Enter an offset (0 -9 and а value. (-1 to stop) 3 30

Enter an offset (0 -9 and а value. (-1 to stop) 4 40

Enter an offset (0 -9 and а value. (-1 to stop) 5 50

Enter an offset (0 -9 and а value. (-1 to stop) 6 60

Enter an offset (0 -9 and а value. (-1 to stop) 7 70

Enter an offset (0 -9 and а value. (-1 to stop) 8 80

Enter an offset (0 -9 and а value. (-1 to stop) 9 90

Enter an offset (0 -9 and а value. (-1 to stop) 1С 10

***Please use values between 0 and 9.* >>*

Enter an offset (0 -9) and а value. (-1 to stop) -1 -1

Here's 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<< определена для каждого типа объекта, сохраняемого в массиве.

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

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10

Искушение генерала драконов

Лунёва Мария
2. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Искушение генерала драконов

Кротовский, не начинайте

Парсиев Дмитрий
2. РОС: Изнанка Империи
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Кротовский, не начинайте

Девочка-яд

Коэн Даша
2. Молодые, горячие, влюбленные
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Девочка-яд

Невеста на откуп

Белецкая Наталья
2. Невеста на откуп
Фантастика:
фэнтези
5.83
рейтинг книги
Невеста на откуп

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Прометей: Неандерталец

Рави Ивар
4. Прометей
Фантастика:
героическая фантастика
альтернативная история
7.88
рейтинг книги
Прометей: Неандерталец

Око василиска

Кас Маркус
2. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Око василиска

Жена проклятого некроманта

Рахманова Диана
Фантастика:
фэнтези
6.60
рейтинг книги
Жена проклятого некроманта

Болотник 2

Панченко Андрей Алексеевич
2. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 2

На границе империй. Том 7. Часть 5

INDIGO
11. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 7. Часть 5

Золушка по имени Грейс

Ром Полина
Фантастика:
фэнтези
8.63
рейтинг книги
Золушка по имени Грейс

Корпулентные достоинства, или Знатный переполох. Дилогия

Цвик Катерина Александровна
Фантастика:
юмористическая фантастика
7.53
рейтинг книги
Корпулентные достоинства, или Знатный переполох. Дилогия