Справочное руководство по C++
Шрифт:
Нельзя в производном классе установить доступ к члену базового класса, если в производном классе определен член с этим же именем, например:
R.11.4 Друзья
Другом класса называется функция, которая не является членом класса, но в которой можно использовать частные и защищенные члены этого класса. Имя друга не принадлежит области видимости класса, и дружественная функция не вызывается с помощью операций доступа к членам (§R.5.2.4), если только она не является членом другого класса. Следующий пример показывает различие между членами и друзьями:
Если в описании friend использовано имя перегруженной функции или операции, только функция, однозначно определяемая типами формальных параметров, становится другом. Функция-член класса X может быть другом класса Y, например:
Можно объявить все функции класса X друзьями класса Y с помощью спецификации-сложного-типа (§R.9.1):
Описание одного класса как друг другого класса дополнительно подразумевает, что частные и защищенные члены класса, предлагающего дружбу, могут использоваться в классе, получающем ее, например:
Если класс или функция, объявленные как друзья, не были описаны, их имена попадают в ту же область видимости, что и имя класса, содержащего описание friend (§R.9.1).
Функция, появившаяся первый раз в описании friend, считается эквивалентной функции, описанной как extern (§R.3.3, §R.7.1.1).
Если функция-друг определена в описании класса, она считается функцией со спецификацией inline и к ней применимо правило переноса определения
На описание friend не влияет указание спецификаций-доступа (§R.9.2).
Понятие дружбы не является ни наследуемым, ни транзитивным.
Подтвердим это примером:
R.11.5 Доступ к защищенным членам
Друг или функция-член производного класса имеет доступ к защищенному статическому члену базового класса. Друг или функция-член производного класса могут получить доступ к защищенному нестатическому члену одного из своих базовых классов только через указатель, ссылку или объект производного класса (или любого класса, являющегося производным по отношению к нему). Рассмотрим пример: