Úvod do funkcie priateľa v C ++

Unikátnou vlastnosťou programu C ++ je to, že používa zapuzdrenie na udržanie údajov zabalených spolu so všetkými svojimi operačnými funkciami na vytvorenie samostatnej entity. To zaisťuje, že ku konkrétnym údajom majú prístup iba úlohy, ktoré s nimi pracujú, a nie žiadna iná úloha mimo tejto triedy. Preto v prípadoch, keď by vonkajšia trieda mohla potrebovať prístup k týmto konkrétnym údajom, používame túto špecifickú funkciu nazývanú funkcia „priateľ“. Vieme, že pomocou kľúčových slov ako „chránené“ a „súkromné“ nemôžeme získať prístup k týmto údajom mimo ich metódy. V záujme aplikácie v reálnom čase však existuje veľa prípadov, keď môžeme potrebovať rovnaké súkromné ​​/ chránené údaje a použitie už deklarovaného je vždy vhodnejšie ako ich vytváranie mnohokrát. Pozrime sa, ako deklarovať a používať funkciu priateľa v jazyku C ++ v tomto článku.

Funkcii priateľa pri deklarovaní predchádza kľúčové slovo „priateľ“, ako je zobrazené tu:

Syntax :

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
)

Ako je uvedené vo vyššie uvedenom kóde, funkcia priateľ musí byť deklarovaná v rovnakej triede, kde bolo deklarované chránené alebo súkromné ​​kľúčové slovo, aby boli tieto údaje prístupné mimo triedy. Túto funkciu je možné deklarovať kdekoľvek v celom programe rovnako ako normálna metóda C ++. Definícia funkcie nevyžaduje kľúčové slová, ako sú priatelia alebo operátori na riešenie problémov.

Príklady funkcie priateľa v programe C ++

Poďme sa pozrieť na fungovanie funkcie priateľa o niečo lepšie, keď uvedieme niekoľko príkladov nižšie.

Príklad č. 1

kód:

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

Výkon:

Funkcia priateľ je tu metóda addWeight (), ktorá je deklarovaná vo váhovej triede. Kilo je súkromné ​​kľúčové slovo deklarované vo vnútri metódy Weight, ku ktorej sa vďaka funkcii addWeight pristupuje. Tento príklad slúži iba na predstavenie základného použitia funkcie priateľa, aj keď tu nie je žiadne použitie v reálnom čase. Pozrime sa teraz na niekoľko zmysluplných príkladov.

Príklad č. 2

kód:

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

Výkon:

V tomto príklade majú triedy FirstClass aj SecondClass deklarované ako funkcia friend. Táto funkcia má preto prístup k údajom súkromných premenných z oboch tried. Funkcia divide () sa tu používa na pridávanie súkromných premenných first_num a sec_num z dvoch objektov fnum a snum a vracia svoju hodnotu hlavnej metóde.

Aby to správne fungovalo, je potrebné urobiť predbežné vyhlásenie pre SecondClass, ako je uvedené v kóde, pretože SecondClass je v rámci FirstClass odkazovaný pomocou programu:

friend int divide(FirstClass, SecondClass);

Trieda priateľov: Existuje trieda priateľov, rovnako ako funkcia priateľov. Trieda priateľ má tiež prístup k súkromným aj chráneným premenným triedy, pretože je jej priateľom.

Syntax :

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

Ako je uvedené vyššie, trieda dva je priateľ triedy jedna. Preto má trieda dva prístup k súkromným a chráneným premenným triedy jedna. Ale trieda jedna nemá prístup k chráneným alebo súkromným premenným triedy dva, pretože to nie je vzájomné priateľstvo. Pre vzájomné priateľstvo by sme to mali výslovne vyhlásiť. Podobne toto priateľstvo triedy nie je zdedené, čo znamená, že trieda dva nebude priateľom podtried triedy One, aj keď je to priateľ triedy One.

Príklad č. 3

kód:

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

Výkon:

V tomto kóde máme 2 triedy: Obvodová trieda, ktorá nájde obvod pomocou hodnôt dĺžky a šírky. Premenné len, brd, obvod a temp sú všetky súkromné ​​premenné obvodu triedy. Preto je potrebné, aby sa printClass stal priateľom triedy Perimeter. Táto printClass používa hodnotu obvodu vypočítanú vo funkcii calcPerimeter () v triede obvodu. Pretože všetci sú súkromnými členmi, musíme si z printPerimeter urobiť priateľa triedy Perimeter. Keď to urobíte, musíme vytvoriť objekt v hlavnej triede na výpočet obvodu a preniesť tento objekt do triedy printPerimeter, aby sa zobrazil obvod.

Funkcie funkcie priateľa v jazyku C ++

  • Metóda a trieda, do ktorej bola vyhlásená za priateľa, nemusia byť rovnaké.
  • Pretože to nie je v rozsahu príslušnej triedy, nemožno ho zavolať pomocou jeho objektu.
  • Môže sa nazývať rovnako ako normálna metóda aj bez použitia objektu.
  • Priamy prístup k menám členov je možné iba pomocou názvu objektu a operátora bodového členstva spolu s menom člena.
  • Neexistuje žiadne obmedzenie, pretože sa môže vyhlásiť v súkromnej alebo verejnej časti.

záver

Berúc do úvahy všetky vyššie diskutované vlastnosti a príklady funkcie priateľa v C ++, je potrebné byť opatrný pri používaní funkcií priateľa s početnými funkciami a externými triedami, pretože to môže znížiť význam zapuzdrenia rôznych tried v objektovo orientovanom programovaní. Preto môže byť programátorom aj požehnaním a bane.

Odporúčaný článok

Toto je sprievodca funkciou priateľa v jazyku C ++. Tu diskutujeme funkciu Úvod do priateľa v C ++ a jej príklady spolu s implementáciou a výstupom kódu. Viac informácií nájdete aj v našich navrhovaných článkoch -

  1. Rekurzívna funkcia v C ++ (príklady)
  2. Top 11 funkcií C ++
  3. Knižnica strojového učenia C ++
  4. Funkcia hasenia v C s typmi
  5. Hashing funkcia v PHP so syntaxou

Kategórie: