Einführung in die Friend-Funktion in C ++

Ein einzigartiges Merkmal des C ++ - Programms besteht darin, dass es die Kapselung verwendet, um die Daten zusammen mit all ihren Betriebsfunktionen zu verpacken und eine einzelne Einheit zu bilden. Dies stellt sicher, dass auf die bestimmten Daten nur von den Tasks zugegriffen werden kann, die darauf ausgeführt werden, und nicht von anderen Tasks außerhalb dieser Klasse. Daher verwenden wir in Fällen, in denen die externe Klasse möglicherweise auf diese bestimmten Daten zugreifen muss, diese spezielle Funktion, die als "Freund" -Funktion bezeichnet wird. Wir wissen, dass wir durch die Verwendung von Schlüsselwörtern wie "protected" und "private" nicht außerhalb der Methode auf diese Daten zugreifen können. Für die Echtzeitanwendung gibt es jedoch viele Fälle, in denen wir dieselben privaten / geschützten Daten benötigen und die Verwendung der bereits deklarierten Daten immer vorzuziehen ist, anstatt sie mehrmals zu erstellen. Lassen Sie uns in diesem Artikel sehen, wie eine Friend-Funktion in C ++ deklariert und verwendet wird.

Einer Friend-Funktion wird beim Deklarieren das Schlüsselwort "friend" vorangestellt, wie hier gezeigt:

Syntax :

class (
private
protected
friend (arguments list);
)
returnDatatype functionName(arguments list)(
//function from which protected and private keywords
//can be accessed from as this is a friend method of className
)
class (
private
protected
friend (arguments list);
)
returnDatatype functionName(arguments list)(
//function from which protected and private keywords
//can be accessed from as this is a friend method of className
)

Wie im obigen Code gezeigt, muss die Friend-Funktion in derselben Klasse deklariert werden, in der das geschützte oder private Schlüsselwort deklariert wurde, damit auf diese Daten außerhalb der Klasse zugegriffen werden kann. Diese Funktion darf wie eine normale C ++ - Methode an einer beliebigen Stelle im gesamten Programm deklariert werden. Die Funktionsdefinition erfordert keine Schlüsselwörter wie Freunde oder Operatoren für die Bereichsauflösung.

Beispiele für die Friend-Funktion im C ++ - Programm

Lassen Sie uns die Funktionsweise der Friend-Funktion anhand einiger Beispiele etwas genauer untersuchen.

Beispiel 1

Code:

/* C++ program which exhibits the working of friend function.*/
#include
using namespace std;
class Weight
(
private:
int kilo;
public:
Weight(): kilo(0) ( )
//Declaration of a friend function
friend int addWeight(Weight);
);
// Defining a friend function
int addWeight(Weight w)
(
//accessing private data from non-member function
w.kilo += 17;
return w.kilo;
)
int main()
(
Weight W;
cout<<"Weight: "<< addWeight(W);
return 0;
)

Ausgabe:

Hier ist die Friend-Funktion die addWeight () -Methode, die in der Weight-Klasse deklariert ist. Kilo ist das in der Weight-Methode deklarierte private Schlüsselwort, auf das über die addWeight-Funktion zugegriffen wird. Dieses Beispiel diente nur zur Veranschaulichung der grundlegenden Verwendung einer Friend-Funktion, obwohl hier keine Echtzeitverwendung vorhanden ist. Lassen Sie uns nun einige bedeutungsvolle Beispiele vertiefen.

Beispiel # 2

Code:

#include
using namespace std;
// Forward declaration
class SecondClass;
class FirstClass (
private:
int first_num;
public:
FirstClass(): first_num(12) ( )
// Declaring a friend function
friend int divide(FirstClass, SecondClass);
);
class SecondClass (
private:
int sec_num;
public:
SecondClass(): sec_num(4) ( )
// Another friend declaration
friend int divide(FirstClass, SecondClass);
);
// Function divide() is the friend function of classes FirstClass and SecondClass
// that accesses the member variables first_num and sec_num
int divide(FirstClass fnum, SecondClass snum)
(
return (fnum.first_num / snum.sec_num);
)
int main()
(
FirstClass fnum;
SecondClass snum;
cout<<"The value got by dividing first by second number: "<< divide(fnum, snum);
return 0;
)

Ausgabe:

In diesem Beispiel wurde für die Klassen FirstClass und SecondClass divide () als Friend-Funktion deklariert. Daher kann diese Funktion auf die Daten der privaten Variablen aus beiden Klassen zugreifen. Hier wird die Funktion divide () verwendet, um private Variablen first_num und sec_num von zwei Objekten fnum und snum hinzuzufügen und ihren Wert an die Hauptmethode zurückzugeben.

Damit dies ordnungsgemäß funktioniert, muss eine Forward-Deklaration für SecondClass wie im Code angegeben erfolgen, da in FirstClass mithilfe des Programms auf SecondClass verwiesen wird:

friend int divide(FirstClass, SecondClass);

Friend-Klasse: Es gibt eine Friend-Klasse, genau wie die Friend-Funktion. Die Friend-Klasse kann auch auf private und geschützte Variablen der Klasse zugreifen, da sie ein Freund der Klasse ist.

Syntax :

class One(
friend class Two;
);
class Two(
);
class One(
friend class Two;
);
class Two(
);
class One(
friend class Two;
);
class Two(
);

Wie oben gezeigt, ist die zweite Klasse ein Freund der ersten Klasse. Daher kann Klasse Zwei auf private und geschützte Variablen der Klasse Eins zugreifen. Klasse Eins kann jedoch nicht auf geschützte oder private Variablen der Klasse Zwei zugreifen, da dies keine gegenseitige Freundschaft ist. Für gegenseitige Freundschaft sollten wir es ausdrücklich erklären. Auf die gleiche Weise wird diese Freundschaft der Klasse nicht vererbt, was bedeutet, dass Klasse Zwei kein Freund der Unterklassen der Klasse Eins sein soll, obwohl sie ein Freund der Klasse Eins ist.

Beispiel # 3

Code:

#include
#include
using namespace std;
class Perimeter(
int len, brd, perimeter, temp;
public:
Perimeter(int len, int brd):len(len), brd(brd)
()
void calcPerimeter()(
temp = len + brd;
perimeter = 2 * temp;
)
friend class printClass;
);
class printClass(
public:
void printPerimeter(Perimeter a)(
cout<<"Perimeter = "< )
);
int main()(
Perimeter a(10, 15);
a.calcPerimeter();
printClass p;
p.printPerimeter(a);
return 0;
)
#include
#include
using namespace std;
class Perimeter(
int len, brd, perimeter, temp;
public:
Perimeter(int len, int brd):len(len), brd(brd)
()
void calcPerimeter()(
temp = len + brd;
perimeter = 2 * temp;
)
friend class printClass;
);
class printClass(
public:
void printPerimeter(Perimeter a)(
cout<<"Perimeter = "< )
);
int main()(
Perimeter a(10, 15);
a.calcPerimeter();
printClass p;
p.printPerimeter(a);
return 0;
)

Ausgabe:

In diesem Code gibt es zwei Klassen: Die Perimeter-Klasse, die den Perimeter anhand der Längen- und Breitenwerte ermittelt. Die Variablen len, brd, perimeter und temp sind alle privaten Variablen des Klassenumfangs. Daher müssen wir printClass zu einem Freund der Perimeter-Klasse machen. Diese printClass verwendet den in der Funktion calcPerimeter () in der Perimeter-Klasse berechneten Perimeter-Wert. Da sie alle private Mitglieder sind, müssen wir printPerimeter zu einem Freund der Perimeter-Klasse machen. Anschließend müssen Sie ein Objekt in der Hauptklasse erstellen, um den Umfang zu berechnen, und dieses Objekt an die printPerimeter-Klasse übergeben, um den Umfang anzuzeigen.

Funktionen der Friend-Funktion in C ++

  • Die Methode und die Klasse, für die sie als Freund deklariert wurde, müssen nicht identisch sein.
  • Da es nicht im Geltungsbereich der jeweiligen Klasse liegt, kann es nicht über sein Objekt aufgerufen werden.
  • Sie kann auch ohne Verwendung des Objekts wie eine normale Methode aufgerufen werden.
  • Auf die Mitgliedsnamen kann nur direkt zugegriffen werden, indem der Objektname und der Punktmitgliedschaftsoperator zusammen mit dem Mitgliedsnamen verwendet werden.
  • Es gibt keine Einschränkung, da es sowohl im privaten als auch im öffentlichen Teil deklariert werden darf.

Fazit

Wenn man alle oben diskutierten Features und die Beispiele der Friend-Funktion in C ++ berücksichtigt, muss man auch vorsichtig sein, wenn man die Funktionen eines Freundes mit zahlreichen Funktionen und externen Klassen verwendet, da dies die Bedeutung der Kapselung verschiedener Klassen bei der objektorientierten Programmierung verringern kann. Daher kann es sowohl ein Segen als auch ein Fluch für den Programmierer sein.

Empfohlener Artikel

Dies ist eine Anleitung zur Friend-Funktion in C ++. Hier diskutieren wir die Einführung in die Friend-Funktion in C ++ und ihre Beispiele zusammen mit der Code-Implementierung und Ausgabe. Sie können auch unsere Artikelvorschläge durchgehen, um mehr zu erfahren -

  1. Rekursive Funktion in C ++ (Beispiele)
  2. Top 11 Funktionen von C ++
  3. Maschinelles Lernen C ++ - Bibliothek
  4. Hashing-Funktion in C mit Typen
  5. Hashing-Funktion in PHP mit Syntax