Uvod u funkciju prijatelja u C ++

Jedinstvena značajka programa C ++ je ta što koristi enkapsulaciju da bi podaci bili umotani zajedno sa svim operativnim funkcijama u jedinicu. To osigurava da se pojedinim podacima može pristupiti samo pomoću zadataka koji se na njemu rade, a ne i bilo kojeg drugog zadatka izvan ove klase. Stoga, u slučajevima kada bi vanjska klasa možda trebala pristupiti tim određenim podacima, koristimo ovu specifičnu funkciju koja se zove funkcija "prijatelj". Znamo da pomoću ključnih riječi poput "zaštićenih" i "privatnih" ne možemo pristupiti tim podacima izvan njegove metode. Ali zbog primjene u stvarnom vremenu, postoje mnogi slučajevi u kojima će nam možda trebati isti privatni / zaštićeni podaci i korištenje već deklariranog je uvijek poželjnije od stvaranja više puta. Pogledajmo kako izjaviti i koristiti Friend funkciju u C ++ u ovom članku.

Prijateljskoj funkciji tijekom deklariranja prethodi ključna riječ "prijatelj" kao što je prikazano ovdje:

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
)

Kao što je prikazano u gornjem kodu, funkciju prijatelja potrebno je deklarirati u istoj klasi u kojoj je zaštićena ili privatna ključna riječ deklarirana da bi ti podaci bili dostupni izvan klase. Ovu je funkciju dopušteno deklarirati bilo gdje u cijelom programu baš kao i uobičajenu metodu C ++. Definicija funkcije ne zahtijeva ključne riječi poput prijatelja ili bilo kojeg operatora za rješavanje opsega.

Primjeri funkcije prijatelja u programu C ++

Pogledajmo malo funkcioniranje funkcije prijatelja uzimanjem nekoliko primjera u nastavku.

Primjer 1

Kodirati:

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

Izlaz:

Ovdje je funkcija prijatelja metoda addWeight () koja je deklarirana unutar težinskog razreda. Kilo je privatna ključna riječ deklarirana unutar metode Weight koja se nakon nje pristupa putem funkcije addWeight. Ovaj je primjer bio samo da se prikaže osnovna upotreba funkcije prijatelja, iako ovdje nema upotrebe u stvarnom vremenu. Zaustavimo sada u nekim značajnim primjerima.

Primjer 2

Kodirati:

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

Izlaz:

U ovom primjeru, i klase FirstClass i SecondClass imaju podjelu () deklarisanu kao prijatelj funkciju. Zbog toga ova funkcija može pristupiti podacima privatnih varijabli iz obje klase. Ovdje se function () funkcija koristi za dodavanje privatnih varijabli first_num i sec_num dva objekta fnum i snum i vraća vrijednost glavnoj metodi.

Da bi ispravno funkcioniralo, potrebno je napraviti preusmjeravanje deklaracije za SecondClass kao što je prikazano u kodu, jer se SecondClass u programu FirstClass poziva pomoću programa:

friend int divide(FirstClass, SecondClass);

Prijateljska klasa: Postoji klasa prijatelja baš kao i funkcija prijatelja. Prijateljska klasa također može pristupiti i privatnim i zaštićenim varijablama klase jer je njihov prijatelj.

Sintaksa :

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

Kao što je prikazano gore, klasa dva je prijatelj prve klase. Otuda klasa dva može pristupiti privatnim i zaštićenim varijablama klase jedna. No, prva klasa ne može pristupiti zaštićenim ili privatnim varijablama razreda dva jer to nije obostrano prijateljstvo. Za međusobno prijateljstvo trebali bismo to izričito proglasiti. Na isti način, ovo prijateljstvo klase nije naslijeđeno, što znači da razred dva neće biti prijatelj potklasa razreda jedan iako je prijatelj razreda prve klase.

Primjer 3

Kodirati:

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

Izlaz:

U ovom kodu imamo 2 klase: Klasa perimetra koja pronalazi perimetar pomoću vrijednosti duljine i širine. Promjenjive len, brd, perimetar i temp sve su privatne varijable perimetra klase. Zbog toga moramo napraviti printClass prijateljem klase Perimeter. Ovaj printClass koristi vrijednost Perimetra izračunato u funkciji calcPerimeter () u klasi Perimeter. Budući da su svi privatni članovi, moramo napraviti printPerimeter prijateljem klase Perimeter. Nakon što je to učinjeno, moramo stvoriti objekt u glavnoj klasi kako bi izračunali perimetar i taj objekt proslijedili u klasu printPerimeter za prikaz perimetra.

Značajke funkcije prijatelja u C ++

  • Metoda i klasa kojoj je proglašen kao prijatelj ne moraju biti isti.
  • Budući da nije u području odgovarajuće klase, ne može se pozvati uporabom objekta.
  • Također se može nazvati kao uobičajena metoda, čak i bez korištenja objekta.
  • Imenima članova može pristupiti samo izravno korištenjem naziva objekta i operatora dotičnog članstva zajedno s imenom njegovog člana.
  • Ne postoji ograničenje jer je dopušteno deklariranje bilo u privatnom ili javnom dijelu.

Zaključak

Uzimajući u obzir sve gore opisane značajke i primjere funkcije prijatelja u C ++, također treba biti oprezan dok koristite prijateljeve funkcije s brojnim funkcijama i vanjskim klasama jer može umanjiti važnost enkapsuliranja različitih klasa u objektno orijentiranom programiranju. Dakle, programeru to može biti i blagodat i draž.

Preporučeni članak

Ovo je vodič za funkciju prijatelja na C ++. Ovdje raspravljamo o Uvodu u Friend funkciju na C ++ i njegovim primjerima zajedno s implementacijom i ishodom koda. također možete proći kroz naše predložene članke da biste saznali više -

  1. Rekurzivna funkcija u C ++ (Primjeri)
  2. Top 11 značajki C ++
  3. Strojno učenje C ++ knjižnica
  4. Funkcija ležanja u C s tipovima
  5. Hashing funkcija u PHP-u sa sintaksom

Kategorija: