friend functions c
Další informace o funkcích přátel v C ++ s příklady.
C ++ podporuje funkci zapouzdření, ve které jsou data svázána společně s funkcemi, které na ní fungují, do jedné jednotky. Tímto způsobem C ++ zajišťuje, že data jsou přístupná pouze funkcím, které na něm pracují, a nikoli nikomu mimo třídu.
Toto je jeden z charakteristických rysů C ++, který zachovává data a zabraňuje jejich úniku do vnějšího světa.
=> Přečtěte si sérii školení Easy C ++.
Ale v některých aplikacích v reálném čase někdy budeme chtít přistupovat k datům mimo dodávanou jednotku. Například třída outsiderů může chtít získat přístup k soukromým a chráněným datům třídy C ++.
C ++ poskytuje nástroj pro přístup k soukromým a chráněným datům pomocí speciální funkce zvané „přítel“ nebo třídy, o které se budeme v tomto tutoriálu bavit.
Co se naučíte:
- Funkce Friend v C ++
- Příklad funkce přítele
- Třída přítele
- Výhody / nevýhody funkce Friend
- Závěr
- Doporučené čtení
Funkce Friend v C ++
Funkce friend v C ++ je funkce, které předchází klíčové slovo „friend“. Když je funkce deklarována jako přítel, může přistupovat k soukromým a chráněným datovým členům třídy.
Funkce friend je deklarována uvnitř třídy s předcházejícím klíčovým slovem friend, jak je znázorněno níže.
class className{ …… friend returnType functionName(arg list); };
Jak je uvedeno výše, funkce friend je deklarována uvnitř třídy, k jejímž soukromým a chráněným datovým členům se má přistupovat. Funkci lze definovat kdekoli v souboru kódu a nemusíme používat operátor klíčové slovo přítel nebo rozlišení oboru.
Při implementaci funkcí přátel v našem programu si musíte zapamatovat několik bodů:
- Funkce přátel může být deklarována v soukromé nebo veřejné části třídy.
- Lze jej nazvat jako normální funkce bez použití objektu.
- Funkce friend není v rozsahu třídy, jejíž je přítelem.
- Funkce friend není vyvolána pomocí objektu třídy, protože není v rozsahu třídy.
- Funkce přátel nemůže přímo přistupovat k soukromým a chráněným datovým členům třídy. Musí použít objekt třídy a poté přistupovat ke členům pomocí operátoru tečky.
- Funkce friend může být globální funkce nebo člen jiné třídy.
Příklad funkce přítele
Implementujme programovací příklad, abychom lépe porozuměli použití funkce Friend.
#include #include using namespace std; class sample{ int length, breadth; public: sample(int length, int breadth):length(length),breadth(breadth) {} friend void calcArea(sample s); //friend function declaration }; //friend function definition void calcArea(sample s){ cout<<'Area = '< Výstup:
Plocha = 150
Ve výše uvedeném programu máme ukázku třídy s délkou a šířkou soukromých členů. Máme veřejný konstruktor, který inicializuje hodnoty délky a šířky. Dále máme funkci přítele „calcArea“, která vypočítává plochu podle délky a šířky.
Mějte na paměti, že calcArea je funkce přítele a není součástí třídy. V hlavní funkci po vytvoření objektu vzorku třídy jej předáme funkci calcArea, která vypočítá plochu a zobrazí hodnotu.
Třída přítele
Stejně jako funkce přátel můžeme mít i třídu přátel. Třída Friend může přistupovat k soukromým a chráněným členům třídy, které je přítelem.
class A{ …… friend class B; }; class B{ …….. };
Jak je znázorněno výše, třída B je přítelem třídy A. Takže třída B může přistupovat k soukromým a chráněným členům třídy A.
To ale neznamená, že třída A má přístup k soukromým a chráněným členům třídy B. Pamatujte, že přátelství není vzájemné, pokud to neděláme.
Podobně se nedědí ani přátelství třídy. To znamená, že protože třída B je přítelem třídy A, nebude přítelem podtříd třídy A.
Vezměme si příklad programování, abychom předvedli třídu přátel.
#include #include using namespace std; class Area{ int length,breadth,area; public: Area(int length,int breadth):length(length),breadth(breadth) {} void calcArea(){ area = length * breadth; } friend class printClass; }; class printClass{ public: void printArea(Area a){ cout<<'Area = '< Výstup:
Plocha = 150
nejlepší webhostingové společnosti v Indii
V tomto programu máme dvě třídy. Třída „Plocha“, která vypočítává plochu pomocí parametrů délky a šířky. Všimněte si, že pole, oblast, délka a šířka jsou všichni soukromí členové oblasti třídy.
Další používanou třídou je „printClass“, která vytiskne plochu vypočítanou funkcí calcArea ve třídě Area. Vzhledem k tomu, že členové jsou soukromí, musíme z printClass udělat přítele třídy Area.
Jakmile je to hotové, v hlavní funkci vytvoříme objekt třídy Area, vypočítáme plochu a předáme objekt funkci printArea třídy printClass pro zobrazení oblasti.
Výhody / nevýhody funkce Friend
Jednou z výhod funkce nebo třídy friend je, že můžeme přistupovat k soukromým a chráněným datům třídy. Například, pokud implementujeme propojený seznam, můžeme vytvořit třídu propojeného seznamu jako přítele třídy uzlu a přistupovat k jeho datům, protože propojený seznam se skládá z uzlů.
V určité situaci se tedy může ukázat jako výhodné použít funkci přítele nebo třídu. Má však také některé nevýhody.
Jedním z charakteristických rysů C ++ je zapouzdření, tj. Sdružování dat a funkcí pracujících na těchto datech společně, aby k datům neměla přístup žádná vnější funkce nebo třída. Ale tím, že povolíme přátelským funkcím nebo třídě přístup k soukromým členům jiné třídy, ve skutečnosti kompromitujeme funkci zapouzdření.
Abychom tomu zabránili, měli bychom být opatrní při používání funkcí nebo třídy přátel. Měli bychom zajistit, že bychom v našem programu neměli používat příliš mnoho přátelských funkcí a tříd, které by zcela zapomněly na zapouzdření.
Závěr
Tím končí náš tutoriál o funkci přátel a třídách v C ++.
Čtenáři musí být při používání tříd a funkcí přátel velmi opatrní, protože to může pro programátora působit jako požehnání, je také třeba jej používat opatrně, protože nadměrné používání funkcí a tříd přátel může ohrozit funkci OOP zapouzdření v našem programu.
V našem nadcházejícím kurzu se podrobně seznámíme se statickými funkcemi v C ++.
=> Navštivte zde a dozvíte se C ++ od nuly.
Doporučené čtení