Информатика и технология программирования

       

Ограничение доступа к объектам классаДружественность


Иногда требуются исключения из правил доступа, когда некоторой функции или классу требуется разрешить доступ к личной части объекта класса. Тогда в определении класса, к объектам которого разрешается такой доступ, должно быть объявление функции или другого класса как "дружественных". Это согласуется с тем принципом, что сам класс определяет права доступа к своим объектам "со стороны".

Объявление дружественной функции представляет собой прототип функции, объявление переопределяемой операции или имя класса, которым разрешается доступ, с ключевым словом friend впереди. Общая схема объявления такова:


class A
{
int x; // Личная часть класса


...
friend class B; // Функции класса B дружественны A


// (имеют доступ к приватной части A)


friend void C::fun(A&#38); // Элемент-функция fun класса C имеет


// доступ к приватной части A


friend void xxx(A&#38,int); // Функция xxx дружественна классу A


friend void C::operator+(А&#38); // Переопределяемая в классе C операция


}; // &#60объект C&#62+&#60объект A&#62 дружественна


// классу A


class B // Необходим доступ к личной части A


{
public: int fun1(A&#38);
void fun2(A&#38);
};
class C
{
public: void fun(A&#38);
void operator+(A&#38);
};

К средствам контроля доступа относятся также объявления функций-элементов постоянными (const). В этом случае они не имеют права изменять значение текущего объекта, с которым вызываются. Заголовок такой функции при этом имеет вид


void dat::put() const { ... }



Содержание раздела