Глава 14. Базовые концепции классов 353
12 char *Cur(); // возвращает текущее имя файла
13 private:
14 struct ffblk ffblk;
15 int done;
16 };
17 #endif
В этом листинге в строках с 6 по 16 располагается определение класса, содержащего конструктор, деструктор (который ничего не делает), функцию Next () и функцию сиг (), возвращающую текущее имя файла. Данные-члены здесь те же самые, что и-в предыдущем листинге: ffblk (строка 14) и done (строка 15).
Так уже существенно лучше первого примера, но мы не остановимся на достигнутом. Это, конечно, дело вкуса, но не кажется ли вам, что цикл for в строках 25 и 26 программы Dir2.cpp выглядит неестественно? Давайте сделаем еще один шаг к совершенству.
Третье приближение
Ничто не может заставить вас многократно перерабатывать свои классы. Наш пример крайне прост; для просмотра оглавления каталога нам требуется изменить только цикл for. По причинам как чисто субъективного характера, так и в демонстрационных целях мы сейчас сделаем некоторые усовершенствования. Наиболее явным претендентом на модернизацию, как уже говорилось, является цикл for: хотелось бы, чтобы он выглядел синтаксически более естественно.
! Предупреждение
Следующий пример оперирует средствами, нами пока не изученными. Вы, разумеется, можете не понять того, чего мы еще не изучали. Эти моменты будут четко акцентированы комментариями и указаниями, в каких главах следует искать детальное изложение незнакомого материала.
Чем хороши классы, так это тем, что усовершенствование уже работающего класса не требует переписывания его заново. Взгляните на листинг 14.6.
1 // DIRLIST.CPP - Не правда ли, элегантно?
2 ftinclude "dirlist.h"
3 void main ()
4 (
5 for( DIRLIST list; list; list++)
6 cout « list « endl;
1 }