Inleiding tot vriendenfunctie in C ++

Een uniek kenmerk van het C ++ -programma is dat het gebruikmaakt van inkapseling om de gegevens samen met alle bedieningsfuncties te bewaren en zo een individuele entiteit te vormen. Dit zorgt ervoor dat de specifieke gegevens alleen toegankelijk zijn voor de taken die erop worden uitgevoerd en niet voor andere taken buiten deze klasse. Daarom gebruiken we, in gevallen waarin de externe klasse mogelijk toegang moet hebben tot deze specifieke gegevens, deze specifieke functie, de "vriend" -functie. We weten dat we door het gebruik van trefwoorden als 'beschermd' en 'privé' geen toegang hebben tot die gegevens buiten de methode. Maar omwille van de realtime-toepassing, zijn er veel gevallen waarin we dezelfde private / beschermde gegevens nodig hebben en het gebruik van de reeds gedeclareerde gegevens heeft altijd de voorkeur boven het vele malen maken. Laten we in dit artikel zien hoe u een Friend-functie in C ++ declareert en gebruikt.

Een vriendfunctie tijdens het declareren wordt voorafgegaan door het trefwoord 'vriend' zoals hier wordt getoond:

Syntaxis :

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
)

Zoals in de bovenstaande code wordt getoond, moet de friend-functie in dezelfde klasse worden gedeclareerd als het beschermde of privé-sleutelwoord is aangegeven om die gegevens buiten de klasse toegankelijk te maken. Deze functie mag overal in het hele programma worden gedeclareerd, net als een normale C ++ -methode. Voor de functiedefinitie zijn geen trefwoorden zoals vrienden of andere scanners nodig.

Voorbeelden van vriendfunctie in C ++ -programma

Laten we de werking van de vriendenfunctie een beetje beter bekijken door een paar voorbeelden hieronder te nemen.

Voorbeeld 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;
)

Output:

Hier is de vriendfunctie de methode addWeight () die wordt aangegeven in de klasse Weight. Kilo is het privé-sleutelwoord dat is opgegeven in de gewichtsmethode en die daarom toegankelijk is via de addWeight-functie. Dit voorbeeld was alleen om het basisgebruik van een vriendenfunctie te demonstreren, hoewel hier geen realtime gebruik is. Laten we nu diep ingaan op enkele betekenisvolle voorbeelden.

Voorbeeld 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;
)

Output:

In dit voorbeeld hebben zowel de klassen FirstClass als SecondClass divide () als vriendfunctie gedeclareerd. Daarom heeft deze functie toegang tot de gegevens van de privévariabelen uit beide klassen. Hier wordt de functie divide () gebruikt om privévariabelen first_num en sec_num van twee objecten fnum en snum toe te voegen en retourneert de waarde ervan naar de hoofdmethode.

Om dit goed te laten werken, moet een forward-aangifte voor SecondClass worden gedaan zoals weergegeven in de code, omdat naar SecondClass wordt verwezen binnen FirstClass met behulp van het programma:

friend int divide(FirstClass, SecondClass);

Vriendenklasse: er is een vriendenklasse, net als de vriendenfunctie. Vriendenklasse heeft ook toegang tot zowel privé- als beschermde variabelen van de klas omdat deze er een vriend mee is.

Syntaxis :

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

Zoals hierboven getoond, is klasse twee een vriend van klasse één. Vandaar dat klasse twee toegang heeft tot private en beschermde variabelen van klasse One. Maar klasse één heeft geen toegang tot beschermde of privévariabelen van klasse twee omdat dit geen wederzijdse vriendschap is. Voor wederzijdse vriendschap moeten we het expliciet verklaren. Op dezelfde manier wordt deze vriendschap van de klasse niet geërfd, wat betekent dat klasse twee geen vriend van de subklassen van klasse één zal zijn, hoewel het een vriend van klasse één is.

Voorbeeld 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;
)

Output:

In deze code hebben we 2 klassen: Perimeterklasse die de omtrek vindt met behulp van de lengte- en breedtewaarden. Variabelen len, brd, perimeter en temp zijn allemaal privévariabelen van de klasseperimeter. Daarom moeten we printClass een vriend van de Perimeterklasse maken. Deze printClass gebruikt de Perimeter-waarde berekend in de functie calcPerimeter () in de Perimeter-klasse. Omdat ze allemaal privé-leden zijn, moeten we printPerimeter een vriend van de Perimeterklasse maken. Als dit is gebeurd, moeten we een object in de hoofdklasse maken om de omtrek te berekenen en dit object doorgeven aan de klasse printPerimeter om de omtrek weer te geven.

Kenmerken van de Friend-functie in C ++

  • De methode en de klasse waartoe het als vriend is verklaard, hoeven niet hetzelfde te zijn.
  • Omdat het niet binnen het bereik van de respectieve klasse valt, kan het niet worden opgeroepen met behulp van het object.
  • Het kan ook net als een normale methode worden genoemd, zelfs zonder het object te gebruiken.
  • Het kan alleen rechtstreeks toegang krijgen tot de namen van de leden met behulp van de objectnaam en de puntlidmaatschapsoperator samen met de naam van het lid.
  • Er is geen beperking, want het is toegestaan ​​om zowel privé als in het publieke deel te worden verklaard.

Conclusie

Gezien alle hierboven besproken functies en de voorbeelden van de vriendfunctie in C ++ moet men ook voorzichtig zijn bij het gebruik van de functies van een vriend met tal van functies en externe klassen, omdat dit het belang van inkapseling van verschillende klassen in objectgeoriënteerd programmeren kan verminderen. Het kan dus zowel een zegen als een vloek zijn voor de programmeur.

Aanbevolen artikel

Dit is een gids voor Friend-functie in C ++. Hier bespreken we de functie Inleiding tot vriend in C ++ en zijn voorbeelden, samen met de implementatie en uitvoer van code. u kunt ook onze voorgestelde artikelen doornemen voor meer informatie -

  1. Recursieve functie in C ++ (voorbeelden)
  2. Top 11 kenmerken van C ++
  3. Machine Learning C ++ bibliotheek
  4. Hashing-functie in C met typen
  5. Hashing-functie in PHP met syntaxis