Wir alle wissen, dass auf private Mitglieder einer Klasse nur über Mitgliedsfunktionen in der Klasse und nicht außerhalb der Klasse zugegriffen werden kann. Dies spiegelt die Kapselungs- und Verschleierungsideen des Klassendesigns in C++ wider, was den grundlegendsten Vorteil von C++ darstellt.
Wenn wir jedoch gelegentlich wirklich auf diese privaten Mitglieder außerhalb der Klasse zugreifen möchten, wird dies viel problematischer und wir geraten in das Dilemma, weder auf sie zugreifen zu können noch sie als öffentliche Typen deklarieren zu können.
Das Auftauchen von Freunden kann dieses Problem sehr gut lösen. Das heißt, indem die externe Funktion als Freundtyp deklariert und ihr das Recht eingeräumt wird, auf private Mitglieder innerhalb der Klasse zuzugreifen, kann das Beste aus beiden Welten erreicht werden. Dies ist die Bedeutung von Freundschaft. Dies lässt sich auch an der wörtlichen Bedeutung erkennen.
Ein Friend-Objekt kann eine globale allgemeine Funktion oder eine Mitgliedsfunktion in einer anderen Klasse sein. Dies wird als Friend-Funktion bezeichnet. Darüber hinaus kann ein Freund auch eine Klasse sein, die als „Freundklasse“ bezeichnet wird.
Nachdem wir die Bedeutung und Funktion von Freunden verstanden haben, schauen wir uns an, wie man sie in C++ verwendet. Für Friend-Funktionen müssen Sie die Funktion lediglich innerhalb der Klasse deklarieren und davor das Schlüsselwort Friend hinzufügen. Diese Funktion verfügt über eindeutige Berechtigungen und wird zu einer Freundesfunktion.
Als letztes ist zu beachten, dass Freunde nicht zur Klasse selbst gehören, unabhängig davon, ob es sich um Freundfunktionen oder Freundklassen handelt. Weder kann der this-Zeiger innerhalb der Klasse verwendet werden, noch kann er vererbt werden, genauso wie die Freunde des Vaters nicht unbedingt die Freunde des Sohnes sind.
Als nächstes schreiben wir ein Programm, um den Abstand zwischen zwei Punkten zu ermitteln:
#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);};//Finde den Abstand zwischen zwei Punkten 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;}
Sie können beobachten, dass die Funktion, die den Abstand zwischen zwei Punkten implementiert, eine externe allgemeine Funktion ist. Da wir auf private Mitglieder in der Klasse zugreifen müssen, deklarieren wir sie als „fried Friend“-Typ in der Klasse, siehe letzte Zeile in der Point-Klasse . Zu diesem Zeitpunkt lässt sich der Code problemlos kompilieren und die normale Ausgabe lautet:
Sie können die Testergebnisse selbst am Computer sehen. Versuchen Sie, es nicht als Freundtyp zu deklarieren und die Fehlerergebnisse zu beobachten.