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, сопровождаются специальным комментарием и оставлены в тексте намеренно, чтобы вы смогли поэкспериментировать с постоянными функциями и увидеть ошибки, выдаваемые при недопустимых действиях.

h02121.jpg

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: };