Глава 19. Классы-шаблоны___________________________________537
рование. Этот прием применяется в тех случаях, когда дублирование нежелательно или приводит к снижению производительности.
Эта реализация может значительно выиграть за счет включения алгоритма isEnipty. Его реализация оставлена вам в качестве упражнения (подсказка:
желаемый результат дает проверка значения top).
Совет
Для функций-членов push и pop излишне указывать спецификатор inline. Если функция определена внутри определения класса, то она автоматически считается встраиваемой. Тем не менее для ясности ключевое слово inline можно оставить.
Модуль, приведенный в листинге 19.7, нужен исключительно для тестирования класса. В строке 9 определен целочисленный стек, способный хранить до пяти элементов. Для тестирования класса на стек кладутся и снимаются несколько наобум взятых чисел. Для проверки механизма обработки ошибок со стека намеренно снимается одно лишнее значение. На выходе отладочной программы числа будут расположены в обратном порядке.
1 |
// STACK.CPP — Только испытательный стенд. Для использования |
2 |
// класса STACK этот модуль не нужен |
3 |
ttifdef STACKSCAFFOLD |
4 |
#include <iostream.h> |
5 |
#include "stack.h" |
6 |
ftdefine DebugPrint( arg) cout « #arg « " " « arg « endl |
7 |
void main() |
8 |
( |
9 |
STACK<int, 10> stk; |
10 |
stk.Push( 5); |
11 |
stk.Push( 3); |
12 |
DebugPrint( stk.Pop()); |
13 |
stk.Push( 10); |
14 |
stk.Push( -13); |
15 |
DebugPrint( stk.Pop() ); |
16 |
DebugPrint ( stk.Pop()) ; |
17 |
DebugPrint( stk.Pop()) ; |
18 |
DebugPrint( stk.Pop()); |
19 |
} |
20 |
#endif |
Далее...
Классы-шаблоны предоставляют одно из наиболее мощных средств написания процедур, не зависящих от типа данных. Аналог шаблонов, реализован-