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

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

Жанры

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

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

Шрифт:

63: { return pType[offSet]; }

64: // аксессоры

65: int GetSize const { return itsSize; }

66: static int GetNumberArrays { return itsNumberArrays; }

67:

68: // функция-друг

69: friend ostream& operator<< (ostream&, const Array<T>&); 70:

71: private:

72: T *pType;

73: int itsSize;

74: static int itsNumberArrays;

75: };

76:

77: template <class T>

78: int Array<T>::itsNumberArrays = 0;

79:

80: template <class T>

81: Array<T>::Array(int size = DefaultSize):

82: itsSize(size)

83: {

84: pType = new T[size];

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

86: pType[i] = (T)0;

87: itsNumberArrays++;

88: }

89:

90: template <class T>

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

92: {

93: if (this == &rhs)

94: return *this;

95: delete [] pType;

96: itsSize = rhs.GetSize;

97: pType = new T[itsSize];

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

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

100: }

101:

102: template <class T>

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

104: {

105: itsSize = rhs.GetSize;

106: pType = new T[itsSize];

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

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

109: itsNumberArrays++;

110: }

111:

112:

113: template <class T>

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

115: {

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

117: output'<< "[" << i << "] " << theArray[i] << endl;

118: return output;

119: }

120:

121:

122:

123: int main

124: {

125:

126: cout << Array<int>::GetNumberArrays << " integer arrays\n";

127: cout << Array<Animal>::GetNumberArrays;

128: cout << " animal arrays\n\n";

129: Array<int> intArray;

130: Array<Animal> animalArray;

131:

132: cout << intArray.GetNumberArrays << " integer arrays\n";

133: cout << animalArray.GetNumberArrays;

134: cout << " animal arrays\n\n";

135:

136: Array<int> *pIntArray = new Array<int>;

137:

138: cout << Array<int>::GetNumberArrays << " integer arrays\n";

139: cout << Array<Animal>::GetNumberArrays;

140: cout << " animal arrays\n\n";

141:

142: delete pIntArray;

143:

144: cout << Array<int>::GetNumberArrays << " integer arrays\n";

145: cout << Array<Animal>::GetNumberArrays;

146: cout << " animal arrays\n\n";

147: return 0;

148: }

Результат:

0 integer arrays

0 animal arrays

1 integer arrays

1 animal arrays

2 integer arrays

1 animal arrays

1 integer arrays

1 animal arrays

Анализ:

Для экономии места в листинге опущено объявление класса Animal. В класс Array добавлена статическая переменная itsNumberArrays (в строке 74), а поскольку эта перемененная объявляется в разделе закрытых членов, в строке 66 добавлен открытый статический метод доступа GetNumberArrays.

Инициализация статической переменной-члена выполняется явно в строках 77 и 78. Конструкторы и деструктор класса Array изменены таким образом, чтобы могли отслеживать число массивов, существующих в любой момент времени.

Доступ к статической переменной, заданной в шаблоне, можно получить так же, как и при работе со статическими переменными-членами обычного класса: с помощью метода доступа, вызванного для объекта класса, как показано в строках 132 и 133, или явным обращением к переменной класса, как показано в строках 126 и 127. Обратите внимание, что при обращении к статической переменной-члену необходимо указать тип массива, так как для каждого типа будет создана своя статическая переменная-член.

Рекомендуется:Используйте статические члены в шаблонах. Специализируйте выполнение шаблона путем замещения функций шаблона для разных типов. Указывайте параметр типа при вызове статических функций шаблона, чтобы получить доступ к функции требуемого типа.

Стандартная библиотека шаблонов

Отличительной чертой новой версии языка C++ является принятие стандартной библиотеки шаблонов (Standard Template Library — STL). Все основные разработчики компиляторов теперь предлагают библиотеку STL как составную часть своих программных продуктов. STL — это библиотека классов контейнеров, базирующихся на шаблонах. Она включает векторы, списки, очереди и стеки, а также ряд таких общих алгоритмов, как сортировка и поиск.

Цель включения библиотеки STL состоит в том, чтобы избавить вас от очередного изобретения колеса и при разработке выполнить за вас рутинные общепринятые процессы. Библиотека STL оттестирована и отлажена, отличается высокой эффективностью и не требует дополнительных затрат. Важнее всего то, что библиотеку STL можно использовать многократно для разработки собственных приложений. Необходимо только один раз разобраться в принципах использования библиотеки STL и классов- контейнеров.

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

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

Сугралинов Данияр
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