Принцип інкапсуляції і обмеження доступу до даних забороняє функціям, що не є методами відповідних класів, доступ до прихованих (private) чи захищених даних об’єкту. Політика цих принципів ООП така, що, коли функція не є членом об’єкту, то вона не може користуватися певним рядом даних. Тим не менше, існують ситуації, коли така жорстка дискримінація призводить до значних незручностей.
Дружні функції як мости між класами
Нехай нам необхідно, щоб функція працювала з об’єктами двох різних класів. Напприклад, функція буде розглядати об’єкти двох класів як аргументи і оброблятиме їх приховані дані. В програмі 13.8 приведено простий приклад FRIEND, що дає уявлення про роботу дружніх функцій в якості мостів між двома класами.
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<bios.h>
class beta;
/////////////
class alpha
{private:
int data;
public:
alpha():data(3) { } // конструктор без аргументів
friend int frifunc(alpha,beta);
};
////////////
class beta
{private:
int data;
public:
beta():data(5) { } //конструктор без аргументів
friend int frifunc(alpha,beta);
};
////////////