Introduksjon til vennefunksjon i C ++

En unik funksjon i C ++ -programmet er at det bruker innkapsling for å holde dataene pakket sammen med alle driftsfunksjoner for å utgjøre en individuell enhet. Dette sikrer at de spesifikke dataene bare kan nås av oppgavene som opererer på den, og ikke av andre oppgaver utenfor denne klassen. I tilfeller der den utenforstående klassen kanskje trenger tilgang til disse spesifikke dataene, bruker vi derfor denne spesifikke funksjonen som kalles “venn” -funksjonen. Vi vet at ved å bruke nøkkelord som "beskyttet" og "privat", kan vi ikke få tilgang til disse dataene utenfor metoden. Men av hensyn til applikasjonen i sanntid er det mange tilfeller der vi kan trenge de samme private / beskyttede dataene, og å bruke de allerede deklarerte er alltid mer å foretrekke enn å opprette dem mange ganger. La oss se hvordan vi kan erklære og bruke en vennefunksjon i C ++ i denne artikkelen.

En vennefunksjon mens deklarerer, går foran "venn" nøkkelordet som vist her:

Syntaks :

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
)

Som vist i koden ovenfor må vennefunksjonen deklareres i samme klasse der det beskyttede eller private nøkkelordet er blitt erklært for at disse dataene skal være tilgjengelige utenfor klassen. Denne funksjonen tillates å deklareres hvor som helst i hele programmet, akkurat som en vanlig C ++ -metode. Funksjonsdefinisjonen krever ikke nøkkelord som venner eller noen operatører av omfangsoppløsning.

Eksempler på vennefunksjon i C ++ -program

La oss sjekke ut hvordan funksjonen til vennen fungerer litt bedre ved å ta noen eksempler nedenfor.

Eksempel 1

Kode:

/* 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;
)

Produksjon:

Her er vennefunksjonen addWeight () -metoden som deklareres innenfor vektklassen. Kilo er det private nøkkelordet som er oppgitt i vekt-metoden, som deretter åpnes fra addWeight-funksjonen på grunn av den. Dette eksemplet var bare for å vise frem den grunnleggende bruken av en vennefunksjon, selv om det ikke er noen sanntidsbruk her. La oss nå dypdykk i noen meningsfulle eksempler.

Eksempel 2

Kode:

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

Produksjon:

I dette eksemplet har både klassene FirstClass og SecondClass deling () erklært som en vennefunksjon. Derfor kan denne funksjonen få tilgang til private variabeldata fra begge klassen. Her divider () -funksjonen brukes til å legge til private variabler first_num og sec_num av to objekter fnum og snum og returnerer verdien til hovedmetoden.

For at dette skal fungere ordentlig, må en forhåndserklæring for SecondClass gjøres som vist i koden fordi SecondClass refereres til i FirstClass ved å bruke programmet:

friend int divide(FirstClass, SecondClass);

Venneklasse: Det er en venneklasse akkurat som vennefunksjonen. Venneklasse kan også få tilgang til både private og beskyttede variabler i klassen, ettersom den er en venn med den.

Syntaks :

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

Som vist over er klasse to en venn av klasse en. Derfor kan klasse to få tilgang til private og beskyttede variabler i klasse én. Men klasse én har ikke tilgang til beskyttede eller private variabler i klasse to fordi dette ikke er et gjensidig vennskap. For gjensidig vennskap, bør vi erklære det eksplisitt. På samme måte arves ikke dette vennskapet til klassen, noe som betyr at klasse to ikke skal være en venn av underklassene i klasse en selv om det er en venn av klasse en.

Eksempel 3

Kode:

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

Produksjon:

I denne koden har vi 2 klasser: Omkretsklasse som finner omkretsen ved å bruke lengde og breddeverdier. Variabler len, brd, perimeter og temp er alle private variabler i klassens omkrets. Derfor må vi gjøre printClass til en venn av Perimeter-klassen. Dette printClass bruker omkretsverdien beregnet i funksjonen calcPerimeter () i klassen Perimeter. Siden de alle er private medlemmer, må vi gjøre printPerimeter til en venn av Perimeter-klassen. Når dette er gjort, må vi lage et objekt i hovedklassen for å beregne omkretsen og føre dette objektet til printPerimeter-klassen for å vise omkretsen.

Funksjoner ved vennefunksjon i C ++

  • Metoden og klassen som den er blitt erklært som en venn trenger ikke være den samme.
  • Siden den ikke er innenfor rammen av den respektive klassen, kan den ikke kalles ved å bruke objektet sitt.
  • Det kan også kalles akkurat som en vanlig metode selv uten bruk av objektet.
  • Den kan bare få direkte tilgang til medlemsnavnene ved å bruke objektnavnet og punktmedlemskapets operatør sammen med medlemsnavnet.
  • Det er ingen begrensninger ettersom det er tillatt å deklareres i hverken privat eller offentlig del.

Konklusjon

Tatt i betraktning alle ovennevnte funksjoner og eksemplene på vennefunksjon i C ++, må man også være forsiktig når man bruker en venns funksjoner med mange funksjoner og eksterne klasser, da det kan redusere viktigheten av innkapsling av forskjellige klasser i objektorientert programmering. Derfor kan det være både en velsignelse og en bane for programmereren.

Anbefalt artikkel

Dette er en guide til Friend Function i C ++. Her diskuterer vi introduksjonen til venn-funksjonen i C ++ og dens eksempler sammen med kodeimplementering og -utdata. kan du også gå gjennom de foreslåtte artiklene våre for å lære mer -

  1. Rekursiv funksjon i C ++ (eksempler)
  2. Topp 11 funksjoner i C ++
  3. Machine Learning C ++ Library
  4. Hashing-funksjon i C med typer
  5. Hashing-funksjon i PHP med Syntax