Глава 14. Базовые концепции классов____________________________35?
При помощи стендовых испытаний достигается сразу несколько целей. Во-первых, вы получаете простой и удобный метод тестирования ваших классов; тестовый код может быть легко включен и исключен при помощи директив препроцессора. К тому же наличие тестового кода однозначно указывает на то, что класс был реально протестирован, а при необходимости из него можно понять, каким образом с классом следует обращаться.
Пример стенда приведен в листинге 14.4; он наглядно демонстрирует, насколько просто использовать новый класс, достигая при этом тех же результатов.
1 // DIR2.CPP — Методы класса на испытательном стенде
2 ttinclude "dir2.h"
3 // определение конструктора
4 DIR_LIST::DIR_LIST( char *fname, int attrib)
5 (
6 done = findfirst( fname, sffblk, attrib) ;
7 } .
8 // Возвращает результат поиска следующего файла,
// соответствующего маске
9 int DIR_LIST::Next()
10 { ' .
11 return ( done = findnext( Sffblk));
12 )
13 // Возвращает имя найденного файла
14 char *DIR_LIST::Cur()
15 (
16 return done ? О : ffblk.rf_name;
17 }•
18 // #undef _DIR2_SCAFFOLD // исключение тестового кода
19 ttdefine _DIR2_SCAFFOLD
20 #ifdef _DIR2_SCAFFOLD
21 ftinclude <iostream.h>
22 void main()
23 {
24 // Насколько компактнее стала программа!
25 for( DIR_LIST list ("*.*"); list.CurO; list.Next() )
26 cout « list.CurO « endl;
27 }
28 #endif
Взгляните на строки 25 и 26. Все необходимое для печати оглавления каталога умещается в этих двух строках.
В строках с 4 по 17 содержатся определения методов класса; код этих методов практически идентичен приведенному в листинге 14.3. Но здесь есть