logo
ООП 2012

37) Дружественные функции, методы и классы.

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

функциям или компонентным функциям другого класса. Эти функции получили название дружественных. По определению, дружественной функцией класса называется функция, которая, не являясь компонентом некоторого класса, имеет доступ ко всем его компонентам. Функция не может стать другом класса «без его согласия». Для получения прав друга функция должна быть описана в теле класса со спецификатором friend. Именно при наличии такого описания класс

предоставляет функции права доступа к защищенным и внутренним компонентам.

Друзьями класса могут являться и компонентные функции другого класса.

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