118
приведенных директивах использованы символические константы, определяе-
мые именем заголовочного файла с символом подчеркивания вместо точки.
16.4. Управление доступом к элементам
Спецификаторы доступа к элементу public, private и protected используют-
ся для управления доступом к данным - элементам класса и функциям -
элементам. По умолчанию режим доступа для классов – закрытый (private), так
что все элементы после заголовка класса и до первого спецификатора доступа
являются закрытыми. После каждого спецификатора режим доступа, опреде-
ленный им, действует до следующего
спецификатора или до завершающей пра-
вой скобки (}) определения класса. Спецификаторы public, private и protected
могут быть повторены, но этот прием используется редко. Закрытые элементы
класса могут быть доступны только для функций-элементов (и дружественных
функций) этого класса. Открытые элементы класса доступны для любых функ-
ций в программе. Основная задача открытых элементов состоит
в том, чтобы
дать клиентам класса представление о возможностях (услугах), которые обеспе-
чивает класс. Этот набор услуг составляет открытый интерфейс класса. Клиен-
ты класса не должны знать, каким образом класс решает их задачи. Закрытые
элементы класса и описания открытых функций-элементов напрямую недос-
тупны для клиентов класса. Эти компоненты составляют
реализацию класса. У
клиентов класса имеется возможность изменять значения закрытых данных с
помощью функций-элементов. Доступ к закрытым данным класса должен тща-
тельно контролироваться с помощью функций-элементов, называемых функ-
циями доступа. Например, чтобы разрешить клиентам прочитать закрытое зна-
чение данных, класс может иметь функцию get (получить), а возможность
изменения закрытых
данных можно реализовать через функцию set (устано-
вить). Функции-элементы set и get обеспечивают проверку правильности дан-
ных и обеспечивают уверенность в том, что данные установлены верно. При-
чем, функция get управляет форматированием и отображением данных, а
функция set должна тщательно анализировать любую попытку изменить значе-
ние закрытого элемента данных. Например, должны быть
отвергнуты попытки
установить день месяца, равный 37, отрицательный вес человека, численную
величину символьного значения и т.д. Клиенты класса должны быть уведомле-
ны о попытке присвоить данным неверные значения.
Программа на рис. 16.9 расширяет класс Time за счет включения функций
чтения и записи закрытых данных-элементов hour, minute и second. Функция
записи жестко управляет установкой
данных-элементов. Попытка задать дан-
ным-элементам неправильные значения вызывает присваивание этим данным-
элементам нулевых значений. Программа сначала использует функции записи,
чтобы задать правильные значения закрытым данным-элементам объекта t клас-
са Time, затем использует функцию чтения для вывода значений на экран.
Далее функции записи пытаются задать элементам hour и second
неправильные
значения, а элементу minute – правильное. После этого функции чтения на-
правляют эти значения на экран. Результат подтверждает, что неправильные