C++/Friend functions and classes

Материал из Энциклопедия о программировании
Перейти к: навигация, поиск

Дружественные функции — функции, внутри которых можно получить доступ к закрытым членам объекта — переменным и функциям, которые в его классе имеют модификатор доступа private.

Поскольку функции являются дружественными, то внутри них можно через объект класса обращаться ко всем его закрытым членам.

Дружественный метод это тоже самое, что дружественная функция, но находится в классе. Т.е., при определении метода в качестве друга, надо указывать его класс.

Дружественный класс это класс в котором все функции явл. дружественными. Т.е. вместо перечисления всех функций класса в качестве дружественных, можно просто сделать дружественным весь класс, чтобы все его функции сразу стали дружественными.

Особенности

  • Для определения дружественных функций, методов и классов используется ключевое слово friend.
  • Для дружественных функций не важно под каким модификатором доступа они определяются.
  • Дружественные функции для конкретного класса указываются в самом этом классе.
  • Определение дружественных функций производится вне класса.
  • Поскольку в дружественных функциях предполагается использовать объект класса, то ко времени определения этих функций все члены этого объекта должны быть известны, т.е. класс должен быть определён до определения дружественной функции.

Правила хорошего тона

Поскольку для дружественных функций модификатор доступа не имеет значения, то определяются они вне явных модификаторов доступа, т.е. до них (вначале, сверху).

Использование

Дружественные методы можно использовать, когда надо делегировать обязанности какому-то другому классу. Напр., если есть класс "Книга", и у неё внутри скрыт список "Страницы", было бы правильно объявить о таком дружественном классе как "Читатель", который может вырвать какую-то страницу из книги.