Uvod v funkcijo prijatelja v C ++

Edinstvena funkcija programa C ++ je ta, da uporablja enkapsulacijo, da ohrani podatke zavite skupaj z vsemi svojimi operativnimi funkcijami, da sestavljajo posamezno entiteto. To zagotavlja, da lahko do določenih podatkov dostopajo le naloge, ki delujejo v njem, in ne katera koli druga naloga zunaj tega razreda. Zato v primerih, ko bi zunanji razred morda potreboval za dostop do teh določenih podatkov, uporabljamo to posebno funkcijo, imenovano "prijatelj" funkcija. Vemo, da z uporabo ključnih besed, kot sta "zaščitena" in "zasebna", do teh podatkov ne moremo dostopati zunaj njegove metode. A zaradi aplikacije v realnem času je veliko primerov, ko bomo morda potrebovali enake zasebne / zaščitene podatke in uporaba že deklariranega je vedno boljše kot ustvarjanje večkrat. Poglejmo, kako v tem članku prijaviti in uporabiti Friend funkcijo v jeziku C ++.

Prijateljeva funkcija med prijavljanjem je pred ključno besedo "prijatelj", kot je prikazano tukaj:

Sintaksa :

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
)

Kot je prikazano v zgornji kodi, je treba funkcijo prijatelja deklarirati v istem razredu, kjer je bila zaščitena ali zasebna ključna beseda navedena, da so ti podatki dostopni zunaj razreda. To funkcijo je dovoljeno prijaviti kjer koli v celotnem programu, tako kot običajna metoda C ++. Opredelitev funkcije ne potrebuje ključnih besed, kot so prijatelji ali nobenega operaterja za reševanje obsega.

Primeri funkcije prijatelja v programu C ++

Naj nekoliko bolje preverimo delovanje funkcije prijatelja, tako da spodimo nekaj primerov spodaj.

Primer # 1

Koda:

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

Izhod:

Tu je funkcija prijatelja metoda addWeight (), ki je navedena v razredu teže. Kilo je zasebna ključna beseda, navedena v metodi Teža, do katere je nato dostopna funkcija addWeight. Ta primer je bil samo za prikaz osnovne uporabe funkcije prijatelja, čeprav tukaj ni sprotne uporabe. Zdaj se poglobimo v nekaj pomembnih primerov.

Primer # 2

Koda:

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

Izhod:

V tem primeru imata oba razreda FirstClass in SecondClass razdelitev (), deklarirana kot prijatelja. Tako lahko ta funkcija dostopa do podatkov zasebnih spremenljivk iz obeh razredov. Tu se funkcija deli () uporablja za dodajanje zasebnih spremenljivk first_num in sec_num dveh predmetov fnum in snum in vrne svojo vrednost glavni metodi.

Da bi pravilno delovalo, je treba narediti posredniško deklaracijo za SecondClass, kot je prikazano v kodi, ker se SecondClass s programom sklicuje na FirstClass:

friend int divide(FirstClass, SecondClass);

Friend Class: Obstaja prijatelj razred, tako kot funkcija prijatelja. Prijateljev razred lahko dostopa tudi do zasebnih in zaščitenih spremenljivk razreda, saj je njegov prijatelj.

Sintaksa :

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

Kot je prikazano zgoraj, je razred dva prijatelj prvega razreda. Zato lahko razred dva dostopa do zasebnih in zaščitenih spremenljivk prvega razreda. Toda prvi razred ne more dostopati do zaščitenih ali zasebnih spremenljivk drugega razreda, ker to ni vzajemno prijateljstvo. Za medsebojno prijateljstvo bi ga morali izrecno izjaviti. Na enak način to prijateljstvo razreda ni podedovano, kar pomeni, da razred dva ne bo prijatelj podrazreda prvega razreda, čeprav je prijatelj prvega razreda.

Primer # 3

Koda:

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

Izhod:

V tej kodi imamo 2 razreda: razred perimetra, ki obod najde s pomočjo vrednosti dolžine in širine. Spremenljivke len, brd, perimeter in temp so vse zasebne spremenljivke razreda perimeter. Zato moramo narediti printClass prijatelja razreda Perimeter. Ta printClass uporablja vrednost Perimeter, izračunano v funkciji calcPerimeter () v razredu Perimeter. Ker so vsi zasebni člani, moramo narediti printPerimeter prijatelja razreda Perimeter. Ko to storimo, moramo v glavnem razredu ustvariti predmet za izračun oboda in ta objekt prenesti v razred printPerimeter, da prikažemo obod.

Značilnosti funkcije prijatelja v C ++

  • Metoda in razred, ki sta ga razglasila za prijatelja, ne bi smela biti enaka.
  • Ker ne spada v področje ustreznega razreda, ga ni mogoče poklicati z uporabo njegovega predmeta.
  • Prav tako jo lahko pokličemo kot običajno metodo tudi brez uporabe predmeta.
  • Do imen članov lahko neposredno dostopa samo z imenom svojega predmeta in operaterjem pike članstva, skupaj z imenom člana.
  • Ni omejitev, saj je dovoljeno deklariranje v zasebnem ali javnem delu.

Zaključek

Glede na vse zgoraj omenjene funkcije in primere prijateljeve funkcije v C ++ je treba biti pozoren tudi pri uporabi prijateljevih funkcij s številnimi funkcijami in zunanjimi razredi, saj lahko to zmanjša pomen pomena vključevanja različnih razredov v objektno usmerjeno programiranje. Zato je programerju lahko blag in blag.

Priporočeni članek

To je priročnik za Friend funkcijo v C ++. Tukaj v C ++ in njegovih primerih obravnavamo funkcijo Uvod v prijatelja in njegove primere, skupaj z izvajanjem in izhodom kode. lahko preberete tudi naše predlagane članke, če želite izvedeti več -

  1. Rekurzivna funkcija v C ++ (primeri)
  2. 11 najboljših funkcij C ++
  3. Strojno učenje C ++ knjižnica
  4. Funkcija lova v C s tipi
  5. Hashing funkcija v PHP s sintakso