Úvod do funkce přátel v C ++

Jedinečnou vlastností programu C ++ je to, že používá zapouzdření k tomu, aby data zabalená společně se všemi svými operačními funkcemi tvořila samostatnou entitu. Tím je zajištěno, že ke konkrétním datům lze přistupovat pouze pomocí úkolů, které na něm pracují, a nikoli jiným úkolem mimo tuto třídu. Proto v případech, kdy by vnější třída mohla potřebovat přístup k těmto konkrétním datům, používáme tuto specifickou funkci nazývanou funkce „přítel“. Víme, že pomocí klíčových slov jako „chráněná“ a „soukromá“ nemůžeme přistupovat k těmto datům mimo jejich metodu. Ale v zájmu aplikace v reálném čase existuje mnoho případů, kdy můžeme potřebovat stejná soukromá / chráněná data a použití již deklarovaného je vždy výhodnější než mnohokrát je vytvořit. Podívejme se, jak v tomto článku deklarovat a používat funkci přítele v C ++.

Funkci přítele při deklarování předchází klíčové slovo „přítel“, jak je uvedeno zde:

Syntaxe :

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
)

Jak je uvedeno ve výše uvedeném kódu, musí být funkce přátel deklarována ve stejné třídě, kde bylo prohlášeno, že chráněná nebo soukromá klíčová slova jsou přístupná mimo třídu. Tato funkce může být deklarována kdekoli v celém programu stejně jako normální metoda C ++. Definice funkce nevyžaduje klíčová slova, jako jsou přátelé nebo operátoři řešení rozsahu.

Příklady funkce přátel v programu C ++

Podívejme se, jak funguje funkce přítele o něco lépe, pomocí několika příkladů níže.

Pří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ýstup:

Funkce přátel je zde metoda addWeight (), která je deklarována uvnitř Hmotnostní třídy. Kilo je soukromé klíčové slovo deklarované uvnitř metody Weight, ke které je díky funkci addWeight přistupováno. Tento příklad měl pouze ukázat základní použití funkce přítele, ačkoli zde není použití v reálném čase. Podívejme se nyní na několik smysluplných příkladů.

Pří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ýstup:

V tomto příkladu mají třídy FirstClass i SecondClass deklarovány jako funkce friend. Proto tato funkce může přistupovat k datům soukromých proměnných z obou tříd. Funkce divide () se zde používá k přidání soukromých proměnných first_num a sec_num dvou objektů fnum a snum a vrací její hodnotu hlavní metodě.

Aby to správně fungovalo, je třeba provést předběžné prohlášení pro SecondClass, jak je ukázáno v kódu, protože SecondClass je v rámci FirstClass odkazován pomocí programu:

friend int divide(FirstClass, SecondClass);

Třída přátel: Existuje třída přátel stejně jako funkce přátel. Třída Friend má také přístup k soukromým i chráněným proměnným třídy, protože je to její přítel.

Syntaxe :

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

Jak je ukázáno výše, třída dva je přítelem třídy jedna. Proto třída dva má přístup k soukromým a chráněným proměnným třídy jedna. Ale třída One nemá přístup k chráněným nebo soukromým proměnným třídy dva, protože to není vzájemné přátelství. Pro vzájemné přátelství bychom to měli výslovně prohlásit. Stejně tak toto přátelství třídy není zděděno, což znamená, že třída dva nebude přítelem podtříd třídy One, i když je to přítel třídy One.

Pří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ýstup:

V tomto kódu máme 2 třídy: Obvodová třída, která najde obvod pomocí hodnot délky a šířky. Proměnné len, brd, perimeter a temp jsou všechny soukromé proměnné obvodu třídy. Proto musíme udělat printClass přítelem třídy Perimeter. Tato printClass používá hodnotu obvodu vypočítanou ve funkci calcPerimeter () ve třídě Perimeter. Protože jsou všichni soukromými členy, musíme z printPerimeter učinit přítele třídy Perimeter. Jakmile je to hotovo, musíme vytvořit objekt v hlavní třídě pro výpočet obvodu a předat tento objekt třídě printPerimeter pro zobrazení obvodu.

Vlastnosti funkce Friend v C ++

  • Metoda a třída, do které byla prohlášena za přítele, nemusí být stejná.
  • Protože to není v rámci příslušné třídy, nelze ji vyvolat pomocí jejího objektu.
  • Lze ji nazvat stejně jako normální metoda i bez použití objektu.
  • Může přímo přistupovat ke jménům členů pouze pomocí svého názvu objektu a operátora tečkového členství spolu se svým členem.
  • Neexistuje žádné omezení, protože může být deklarováno v soukromé nebo veřejné části.

Závěr

Při zvažování všech výše diskutovaných funkcí a příkladů funkce přítele v C ++ je třeba být opatrný při používání funkcí přítele s četnými funkcemi a externími třídami, protože to může snížit význam zapouzdření různých tříd v objektově orientovaném programování. Proto může být programátorem jak požehnáním, tak i bane.

Doporučený článek

Toto je průvodce funkcí přítele v C ++. Zde diskutujeme funkci Úvod do přítele v C ++ a její příklady spolu s implementací a výstupem kódu. můžete také projít naše doporučené články a dozvědět se více -

  1. Rekurzivní funkce v C ++ (příklady)
  2. Prvních 11 funkcí C ++
  3. Strojové učení C ++ knihovna
  4. Hashing funkce v C s typy
  5. Hashing Function v PHP se syntaxí

Kategorie: