C++: методы-члены класса, дружественные классы и члены класса
Дружественные члены класса
Дружественные члены класса (методы) позволяют получить доступ к защищенным модификатором private членам класса из методов других классов. Методы и классы, объявляемые дружественными, иногда также называются друзьями класса.
Если метод класса A внутри тела класса B объявляется с модификатором friend, что указывает на то, что он является другом класса, то из него разрешен доступ ко всем членам класса B.
Например:
class A { public: int Fx();}
class B { public: friend int A::Fx();
private:
}Дружественные классы
Объявление дружественного класса позволяет всем его методам получить доступ ко всем переменным и методам другого класса.
Например:
class A {public: int Fx();}
class B {public:
friend class A;
private:
}Дружественный класс или член класса будет доступен только в том случае, если он был объявлен в области видимости самого класса или ранее во внешней области видимости, внутри которой располагается область видимости, содержащая объявление класса с объявлениями друзей класса.
Например:
class A {public:
// Класс расположен во внешней
// области видимости
int Fx1();
}
namespace classB {
class B {public:
friend class A;
friend class C;
private:
}
class C { public:
// Класс расположен в том же
// пространстве имен
int Fx2();
}
}Дружественные классы не наследуются, и их дружественность не является транзитивной.
Например:
class A {int Fx();}
class B {friend class A;}
class C {friend class B;}
// Класс А не является
// дружественным классу C
class D : public B {}
// Класс А не является
// дружественным классу D