272 __ ____ ________________Часть II. Программирование на C++
У каждого класса есть своя область видимости. Данные и функции, определенные в классе, попадают в область видимости класса. Следовательно, функции могут обращаться к данным непосредственно, без необходимости передачи их в качестве аргументов. Это похоже на ситуацию с глобальными переменными: их не обязательно передавать в качестве аргументов, функции и так имеют к ним доступ. Различие состоит в том, что данные-члены класса не глобальные, но, тем не менее также доступны функциям-членам. Таким образом, поскольку данные доступны функциям, количество аргументов функций можно сократить.
Далее, программирование в терминах классов обнаруживает явную тенденцию к уменьшению размеров функций. Тому может быть много объяснений — в частности, мелкие функции удобнее в отладке. В общем, вы обнаружите, что почти непроизвольно начнете создавать небольшие специализированные функции, а не будете пытаться свалить решение всех проблем в одну большую. Рассмотрим, например, функцию открытия файла OpenFile. Где лучше расположить проверку существования файла: внутри функции, вне ее или в обоих местах? Это дело достаточно субъективное, но вполне вероятно, что в обоих местах.
Вот как можно поступить в этом случае:
bool Fi.leExists ( char *fname) ; // Возвращает true, если файл
// существует, иначе — false
int OpenFile( char *fname); // Возвращает дескриптор файла if (FileExistsf fname)) then OpenFile ( fname);
При таком подходе можно включить в функцию проверку существования файла путем утверждения (assertion), чтобы осуществлять эту проверку в фазе разработки программы. В окончательном варианте функция OpenFile не будет содержать код проверки и, естественно, уменьшится в объеме.
Вторая причина измельчания функций заключается в том, что многие процессы происходят внутри самого объекта — в частности, инициализация и перегрузка операций, также существенно упрощающие и сокращающие код программы (см. главу 16 "Перегрузка операций").
Вам еще предстоит достичь мастерства, необходимого, чтобы прочувствовать эти тонкости, но не жалейте труда: удачное применение средств C++ будет щедро вознаграждено.
Далее...
Функции являются, наверное, одними из самых старых строительных блоков, имеющихся в распоряжении программистов. C++ позволяет решать проблемы многими способами. В этой главе продемонстрированы некото-