Introducere în funcția prietenului în C ++

O caracteristică unică a programului C ++ este că utilizează încapsulare pentru a păstra datele înfășurate împreună cu toate funcțiile sale de operare pentru a constitui o entitate individuală. Acest lucru asigură că datele specifice pot fi accesate numai de sarcinile care operează pe ea și nu de orice altă sarcină din afara acestei clase. Prin urmare, în cazurile în care clasa externă ar putea avea nevoie să acceseze aceste date particulare, folosim această funcție specifică numită funcția „prieten”. Știm că folosind cuvinte cheie precum „protejat” și „privat” nu putem accesa aceste date în afara metodei sale. Dar, de dragul unei aplicații în timp real, există multe cazuri în care este posibil să avem nevoie de aceleași date private / protejate, iar utilizarea celor declarate deja este întotdeauna mai preferabilă decât crearea acestora de mai multe ori. Să vedem cum se declară și se utilizează funcția de prieten în C ++ în acest articol.

O funcție de prieten în timp ce declară este precedată de cuvântul cheie „prieten” așa cum se arată aici:

Sintaxa :

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
)

Așa cum se arată în codul de mai sus, funcția de prieten trebuie declarată în aceeași clasă în care a fost declarat cuvântul cheie protejat sau privat pentru ca aceste date să fie accesibile în afara clasei. Această funcție este permisă să fie declarată oriunde în întregul program la fel ca o metodă C ++ normală. Definiția funcției nu necesită cuvinte cheie precum prieteni sau niciun operator de rezolvare a domeniului de aplicare.

Exemple de funcții prietene în programul C ++

Să verificăm funcționarea un pic mai bună a funcției de prieten, luând câteva exemple de mai jos.

Exemplul # 1

Cod:

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

ieşire:

Aici funcția de prieten este metoda addWeight () declarată în cadrul clasei de greutate. Kilo este cuvântul cheie privat declarat în metoda Weight, la care este accesat din funcția addWeight din cauza acesteia. Acest exemplu a fost doar pentru a prezenta utilizarea de bază a unei funcții de prieten, deși aici nu există o utilizare în timp real. Haideți acum să ne adâncim în câteva exemple semnificative.

Exemplul # 2

Cod:

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

ieşire:

În acest exemplu, atât clasele FirstClass cât și SecondClass au divizare () declarate ca funcție de prieten. Prin urmare, această funcție poate accesa datele variabilelor private din ambele clase. Aici funcția divide () este utilizată pentru a adăuga variabile private first_num și sec_num a două obiecte fnum și snum și returnează valoarea acesteia la metoda principală.

Pentru ca acesta să funcționeze corect, trebuie făcută o declarație înainte pentru SecondClass așa cum se arată în cod, deoarece SecondClass este făcută referință în FirstClass folosind programul:

friend int divide(FirstClass, SecondClass);

Clasa de prietenie: Există o clasă de prieteni la fel ca funcția de prieten. Clasa prieten poate accesa, de asemenea, variabile private și protejate ale clasei, deoarece este prietenă cu ea.

Sintaxa :

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

După cum s-a arătat mai sus, clasa a doua este un prieten al clasei unu. Prin urmare, clasa a doua poate accesa variabile private și protejate din clasa întâi. Dar clasa I nu poate accesa variabile protejate sau private din clasa a doua, deoarece aceasta nu este o prietenie reciprocă. Pentru prietenie reciprocă, ar trebui să o declaram în mod explicit. În același mod, această prietenie a clasei nu este moștenită, ceea ce înseamnă că clasa a doua nu va fi un prieten al subclaselor clasei I, chiar dacă este un prieten al clasei unu.

Exemplul # 3

Cod:

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

ieşire:

În acest cod, avem 2 clase: clasa Perimetru care găsește perimetrul folosind valorile lungimii și lățimii. Variabilele len, brd, perimetru și temp sunt toate variabile private ale perimetrului clasei. Prin urmare, trebuie să facem printClass un prieten al clasei Perimetru. Această imprimare Clasă utilizează valoarea Perimetru calculată în funcția calcPerimetru () din clasa Perimetru. Întrucât toți sunt membri privați, trebuie să facem printPerimeter un prieten al clasei Perimetru. Odată făcut acest lucru, trebuie să creăm un obiect din clasa principală pentru a calcula perimetrul și a trece acest obiect la clasa printPerimeter pentru a afișa Perimetrul.

Caracteristici ale funcției prietenului în C ++

  • Nu trebuie să fie aceeași metoda și clasa la care a fost declarată prietenă.
  • Deoarece nu intră în sfera clasei respective, nu poate fi apelat folosind obiectul său.
  • Poate fi, de asemenea, numit ca o metodă normală, chiar și fără utilizarea obiectului.
  • Poate accesa direct numele membrilor doar utilizând numele său de obiect și operatorul de membru punct, împreună cu numele de membru.
  • Nu există nicio restricție, deoarece este permis să fie declarată fie în partea privată, nici în partea publică.

Concluzie

Având în vedere toate caracteristicile discutate mai sus și exemplele funcției de prieten în C ++, trebuie de asemenea să fii atent în timp ce folosești funcțiile unui prieten cu numeroase funcții și clase externe, deoarece poate reduce importanța încapsulării diferitelor clase în programarea orientată pe obiecte. Prin urmare, poate fi atât o amploare cât și o interdicție pentru programator.

Articol recomandat

Acesta este un ghid pentru funcția prietenului în C ++. Aici discutăm funcția Introducere în prieten în C ++ și exemplele sale împreună cu implementarea și ieșirea codului. puteți parcurge și articolele noastre sugerate pentru a afla mai multe -

  1. Funcție recursivă în C ++ (exemple)
  2. Top 11 caracteristici ale C ++
  3. Biblioteca de învățare automată C ++
  4. Funcție de zgomot în C cu Tipuri
  5. Funcție Hashing în PHP cu Sintaxă