272_______________________________Часть II. Программирование на C++
использовав для простоты структуру (хотя структура и не класс, но обладает некоторыми его признаками).
struct В {
int a;
int ReturnAf) const { а; } // Постоянная функция-член }
Структура в имеет два элемента: целое число и функцию, возвращающее целое -число. Функция-член Re-turnA является постоянной. Определение функции-члена как постоянной означает, что сама функция не будет изменять значение объекта. Постоянные функции могут оперировать как с постоянными, так и с непостоянными объектами. Обратное неверно. Непостоянная функция не может быть вызвана с постоянным объектом, потому что нет никакой гарантии, что она его не попытается изменить.
Замечание
Функции-члены, дающие пользователям классов (или структур) доступ к данным-членам, часто называются функциями доступа (accessor functions).
Функции, возвращающие значение элемента, называются функциями-членами только для чтения (read-only member functions). Если функция возвращает ссылку на элемент, например
ints ReturnA(){ return sa; } то она называется функцией доступа чтения/записи (read/write accessor).
Для примера приведем короткую программу. Строки, содержащие некорректные операции с const, сопровождаются специальным комментарием и оставлены в тексте намеренно, чтобы вы смогли поэкспериментировать с постоянными функциями и увидеть ошибки, выдаваемые при недопустимых действиях.
1 // CONFUNC.CPP — Демонстрирует постоянные функции-члены
2 #include <iostream.h>
3 struct CONSTANT_MEMBER
4 {
5 int val;
6 // Конструктор со списком инициализации
7 CONSTANT_MEMBER( int v = 1) : val(v){} ;
8 int ConstRetVal() const;
9 int RetVal() ;
10: };