Ключевое слово friend
Ключевое слово friend используется внутри класса для предоставления доступа к его закрытым (private) и защищенным (protected) членам. Дружественной может быть объявлена внешняя функция, метод другого класса или целый класс. В первом случае мы указываем конкретную функцию, которая получает доступ, во втором - метод чужого класса, а в третьем - весь класс целиком. При этом сам класс, объявляющий дружбу, не получает доступа к членам своих друзей.
Синтаксис
class ClassName
{
friend return_type function_name(params);
friend class FriendClassName;
// ...
};
Пример
Давайте объявим дружественную функцию, которая получает доступ к закрытому полю класса:
#include <iostream>
using namespace std;
class MyClass
{
private:
int num = 42;
friend void showNum(MyClass obj);
};
void showNum(MyClass obj)
{
cout << obj.num << endl;
}
int main()
{
MyClass obj;
showNum(obj);
return 0;
}
Результат выполнения кода:
42
Пример
Давайте объявим дружественный класс, который получает доступ к закрытому полю другого класса:
#include <iostream>
using namespace std;
class MyClass
{
private:
int num = 42;
friend class FriendClass;
};
class FriendClass
{
public:
void showNum(MyClass obj)
{
cout << obj.num << endl;
}
};
int main()
{
MyClass obj;
FriendClass friendObj;
friendObj.showNum(obj);
return 0;
}
Результат выполнения кода:
42
Пример
Давайте объявим дружественный метод другого класса, который получает доступ к закрытому полю:
#include <iostream>
using namespace std;
class MyClass;
class FriendClass
{
public:
void showNum(MyClass obj);
};
class MyClass
{
private:
int num = 42;
friend void FriendClass::showNum(MyClass obj);
};
void FriendClass::showNum(MyClass obj)
{
cout << obj.num << endl;
}
int main()
{
MyClass obj;
FriendClass friendObj;
friendObj.showNum(obj);
return 0;
}
Результат выполнения кода:
42