Глава 19. Классы-шаблоны___________________________________537

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

Эта реализация может значительно выиграть за счет включения алгоритма isEnipty. Его реализация оставлена вам в качестве упражнения (подсказка:

желаемый результат дает проверка значения top).

Совет

Для функций-членов push и pop излишне указывать спецификатор inline. Если функция определена внутри определения класса, то она автоматически считается встраиваемой. Тем не менее для ясности ключевое слово inline можно оставить.

Модуль, приведенный в листинге 19.7, нужен исключительно для тестирования класса. В строке 9 определен целочисленный стек, способный хранить до пяти элементов. Для тестирования класса на стек кладутся и снимаются несколько наобум взятых чисел. Для проверки механизма обработки ошибок со стека намеренно снимается одно лишнее значение. На выходе отладочной программы числа будут расположены в обратном порядке.

h05311.jpg

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


Далее...

Классы-шаблоны предоставляют одно из наиболее мощных средств написания процедур, не зависящих от типа данных. Аналог шаблонов, реализован-