Описание тега friend-function

В C++ функция друга - это своего рода функция, которая является "другом" данного класса, и ему разрешен доступ к частным и защищенным данным в этом классе, что обычно невозможно, как если бы данные были общедоступными.

Вики

Функция друга в C++ класс определен вне области действия класса, но имеет право доступа ко всем private а также protectedчлены класса. Несмотря на то, что прототипы дружественных функций появляются в определении класса, друзья не являются функциями-членами.

Чтобы объявить функцию как друга класса, перед прототипом функции в определении класса укажите ключевое слово friend следующим образом

пример

// friend_functions.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;
class Point
{
    friend void ChangePrivate( Point & );
public:
    Point( void ) : m_i(0) {}
    void PrintPrivate( void ){cout << m_i << endl; }

private:
    int m_i;
};

void ChangePrivate ( Point &i ) { i.m_i++; }

int main()
{
   Point sPoint;
   sPoint.PrintPrivate();
   ChangePrivate(sPoint);
   sPoint.PrintPrivate();
}

Использование тегов

Тег friend-function можно использовать для решения проблем, связанных с программированием при реализации дружественных функций. Следует избегать теоретических вопросов, таких как "Как использовать дружественные функции".

Подробнее