Ключевое слово friend позволяет определить дружественную функцию, которая не являясь членом класса имеет доступ к его приватным или защищенным членам.
#include <iostream> // std::cout
using namespace std;
class Point{
int x = 0; // Приватная координата х
int y = 0; // Приватная координата у
friend void set_point(Point& pt, int a, int b); // Объявляем дружественную функцию
public:
void print(){ // Функция выводит координаты точки
cout << x << ", " << y << endl;
}
};
void set_point(Point& pt, int a, int b){
pt.x = a; // Задаем значения приватной переменной x класса Point
pt.y = b; // Задаем значения приватной переменной y класса Point
}
int main(){
Point pt; // Создаем объект pt класса Point
pt.print(); //0, 0 Выводим значения х и у
set_point(pt, 13, 7); // Вызываем функцию с объектом pt и коррдинтами точки
pt.print(); //13, 7 Дружественная функция set_poing (не член класса) изменила приватные члены х и у
}