Мы все знаем, что к частным членам класса можно получить доступ только с помощью функций-членов класса и к ним нельзя получить доступ за пределами класса. Это отражает идеи инкапсуляции и сокрытия дизайна классов в C++, что является самым основным преимуществом C++.
Но если время от времени нам действительно захочется получить доступ к этим закрытым членам вне класса, это станет гораздо более проблематичным, и мы столкнемся с дилеммой: мы не сможем ни получить к ним доступ, ни объявить их как открытые типы.
Появление друзей может очень хорошо решить эту проблему, то есть, объявив внешнюю функцию как тип друга и предоставив ей право на доступ к частным членам внутри класса, можно достичь лучшего из обоих миров. Это значение дружбы. Это также видно из буквального значения. Как и «друзья», оно открывает зеленый канал.
Дружественный объект может быть глобальной общей функцией или функцией-членом другого класса. Это называется дружественной функцией . Мало того, другом также может быть класс, который называется классом друга .
Поняв значение и функцию друзей, давайте посмотрим, как их использовать в C++. Для дружественных функций вам нужно только объявить функцию внутри класса и добавить перед ней ключевое словоFriend . Эта функция имеет уникальные разрешения и становится дружественной функцией.
Последнее, что следует отметить, это то, что друзья не принадлежат самому классу, будь то дружественные функции или дружественные классы. Указатель this нельзя использовать внутри класса и он не может быть унаследован, точно так же, как друзья отца не обязательно являются друзьями сына.
Далее напишем программу для поиска расстояния между двумя точками:
#include<iostream>#include<math.h>usingnamespacestd;classPoint{private:doublex;doubley;public:Point(doublea,doubleb){x=a;y=b;}intGetPoint(){cout<<(<< x<<,<<y<<);return0;}frienddoubleDistance(Point&a,Point&b);};//Находим расстояние между двумя точками doubleDistance(Point&a,Point&b){doublexx;doubleyy;xx=ax-bx;yy = ay-by;returnsqrt(xx*xx+yy*yy);}intmain(){PointA(2.0,3.0);PointB(1.0,2.0);doubledis;dis=Distance(A,B);cout<<dis < <endl;return0;}
Вы можете заметить, что функция, реализующая расстояние между двумя точками, является внешней общей функцией. Поскольку нам нужен доступ к закрытым членам класса, мы объявляем ее как жареный дружественный тип в классе, см. последнюю строку в классе Point. . На данный момент код компилируется без проблем, и нормальный вывод:
Вы можете увидеть результаты теста. Вы можете поэкспериментировать самостоятельно на компьютере. Старайтесь не объявлять его типом друга и наблюдать за результатами ошибок.