    ЗАМЕЧАНИЕ 

    Члены класса закрыты по умолчанию, и, действительно; строка 5 в 
CLASS2.CPP — лишняя. Конечно, для внесения ясности в программу отмечать 
закрытые члены с помощью недвусмысленного спецификатора доступа private — 
неплохая идея. 

    В классе могут присутствовать многочисленные открытые и закрытые секции, 
располагающиеся в произвольном порядке. Вы можете повторять спецификаторы 
доступа private и public в объявлении класса (строки 5 и 11) столько раз, 
сколько понадобится. Хотя это не показано в примере, функции-члены также могут 
быть объявлены в закрытой части, но обычно они открыты. Вы также узнаете о 
третьем спецификаторе доступа, protected, в главе 14. 
    Два других дополнения к TTime — функции-члены GetTime() и SetTime() (строки 
13-14). Вместе с Display() три функции-члена ограничивают доступ к закрытым 
частям класса. Для использования закрытых данных-членов TTime существует лишь 
один законный способ — вызов открытых функций-членов класса. Непосредственный 
результат инкапсуляции данных и функций в классе — при изменении представления 
данных требуется переписать лишь функции-члены класса. Таким образом, если 
возникла подобная проблема, отладка может начаться с исследования 
функций-членов класса, поскольку не существует других функций или операторов, 
в которых осуществляется непосредственный доступ к закрытым данным-членам 
класса. На рис. 13.2 демонстрируется эта концепция, стрелочками отмечены пути 
доступа к открытым и закрытым членам класса. Заметьте, что функции в классе 
имеют доступ друг к другу, т.е. две функции класса могут вызывать одна другую. 
    В строках 40-56 вводятся две новые функции-члена — GetTime() и SetTime(). 
Как и Display(), имя класса и оператор разрешения области видимости TTime:: 
предшествует именам функций, что указывает компилятору на принадлежность этих 
функций классу. В программе могут быть объявлены другие функции и 
функции-члены с именем GetTime() и SetTime() в других классах без конфликтов с 
принадлежащими TTime. 
    В телах функций-членов операторы имеют непосредственный доступ к 
данным-членам класса month, day, year, hour и minute (рис. 13.2.) Например, в 
GetTime(), в строках 42—46 передаются значения компонентов объекта класса 
обратно, в аргументы оператора вызова, путем использования пяти целочисленных 
ссылочных параметров. В SetTimeO значения параметров присваиваются 
данным-членам класса. 

    »\			Класс 
    / /			X 
    /		Закрытые данные-члены Л			Открытые            ^ _ 
    данные-члены 
    \ Внешним операторам! запрещен доступ к ^закрытым членам       J							| 
Внешним операторам ] разрешен доступ к ^открытым членам      J 
    \			J.      ™ 
    ,\		Закрытые функции-члены			Открытые 
    4 —— »•	функции-члены . —— . щ	W 
    */			,		^ 
    
    
    Функции-члены класса имеют свободный доступ к прочим членам этого класса 
    
    Рис. 13.2. Классы ограничивают доступ к закрытым членам 

    В основной программе, поскольку данные-члены TTime закрыты в классе, 
больше невозможно присваивать значения непосредственно объекту класса. 
Например, оператор из CLASS1.CPP 

    appointment.month = 7;	// ??? 

    вызвал бы сообщение об ошибке при компиляции CLASS2.CPP, так как month 
закрыт в классе TTime и поэтому может непосредственно использоваться только 
членами этого класса Если вы попытаетесь скомпилировать этот оператор, 
компилятор "пожалуется", что "TTime::month is not accessible in function 
main()" (TTime::month не доступен в функции main()). 


    310 (197)                                                               Часть III. Программирование на ANSI C++ 