Funkce přítele, ať už používaná funkcí nebo třídou, může negativně ovlivnit objektově orientovaný rámec, protože oslabuje zapouzdření, které je proti objektově orientovanému paradigmatu. To je důvod, proč musí být funkce přítele použita moudře, jinak by mohlo dojít k porušení datového úkrytu kódu.
Tato funkce přítele není komutativní ani tranzitivní . X je přítel Y nevyvodí, že Y je také přítel X. Pokud X je přítel Y a Y je přítel Z, neznamená, že X je přítel Z.
Srovnávací graf
Základ pro srovnání | Funkce přítele | Třída přátel |
---|---|---|
Základní | Je to funkce používaná s klíčovým slovem přítele, která uděluje nečlenským funkcím přístup soukromým členům třídy. | Jedná se o třídu používanou s klíčovým slovem přítele pro přístup k soukromým členům jiné třídy. |
Předběžná deklarace | Musí být použito. | Nepovinné. |
Použití | V některých situacích přetížení obsluhy lze použít funkci přátel. | Třídu přátel lze použít, když je třída vytvořena na vrcholu jiné třídy. |
Definice funkce přítele
Funkce přátel se používá pro přístup k soukromým a chráněným členům třídy povolením přístupu nečlenské funkce. V tomto typu funkce se klíčové slovo přítele používá před názvem funkce v době deklarace. Tam jsou některé omezující podmínky aplikované na funkci přítele. První podmínkou je, že funkce přítele není zděděna třídou dětí. Druhou podmínkou je, že specifikátor třídy úložiště nemusí být přítomen ve funkci přítele, což znamená, že nemůže být deklarován jako statický a extern.
Funkce přítele není volána s vyvolávajícím objektem třídy. Příklady funkce přátel jsou: globální funkce, členská funkce třídy, funkční šablona může být funkce přátel. Pochopme to s pomocí příkladu.
#include using namespace std; třída první {int data; public: first (int i): data (i) {} přítel void display (const first a a); }; void display (const first & a) {cout << "data =" <Definice třídy přátel
Podobně jako funkce přítele můžeme jednu třídu označit za přítele jiné třídy, která je označována jako třída přátel . Takže třída přátel může získat přístup k soukromým členům definovaným v jiné třídě. Je důležité si uvědomit, že třída přátel může přistupovat pouze k názvům definovaným v rámci jiné třídy místo zdědění jiné třídy. Členové první třídy se nemohou stát členy třídy přátel. Tyto třídy přátel se používají jen zřídka.
Třída přátel může být deklarována ve více než jedné třídě. Považuje se to za krátkou alternativní metodu pro funkci kamaráda, protože pomocí ní můžeme vytvořit třídu přátel, která bude mít přístup k celému datovému členu a funkci namísto vytváření více funkcí přátel.
#include using namespace std; class First {// Deklarovat přítele třídy přítele class; public: First (): a (0) {} void print () {cout << "Výsledkem je" << a << endl; } private: int a; }; class Second {public: void change (První a yclass, int x) {yclass.a = x; }}; int main () // Output Výsledek je 0 Výsledek je 5Klíčové rozdíly mezi funkcí přítele a třídou přátel
- Funkce Friend je funkce, která umožňuje přístup k soukromým a chráněným členům třídy. Třída přátel je naopak třída, která pomáhá při přístupu k soukromým členům třídy.
- Funkce přítele je deklarována zahrnutím jeho prototypu do třídy, antecede s klíčovým přítelem. Podobně je třída přátel definována také pomocí klíčového přítele.
- Prohlášení o forwardu se používá v případě přátelské funkce proti, není nutné jej používat ve třídě přátel.
Závěr
Funkce přátel je vyžadována, když funkce potřebuje přístup ke dvěma nebo více nezávislým třídám, interním členům. Třída přátel je naopak potřebná, pokud třída vyžaduje přístup ke členům jiné třídy. Když funkce více členů musí být přítelem této funkce, v tomto případě je lepší použít třídu přátel.