friend functions c
Meer weten over vriendfuncties in C ++ met voorbeelden.
C ++ ondersteunt de functie van inkapseling waarbij de gegevens worden gebundeld met de functies die erop werken om een enkele eenheid te vormen. Door dit te doen zorgt C ++ ervoor dat gegevens alleen toegankelijk zijn voor de functies die erop werken en niet voor iemand buiten de klas.
Dit is een van de onderscheidende kenmerken van C ++ dat de gegevens bewaart en voorkomt dat ze naar de buitenwereld lekken.
Lees de Easy C ++ Training Series door.
Maar in sommige real-time applicaties willen we soms toegang tot gegevens buiten de gebundelde eenheid. Een klasse van buitenstaanders kan bijvoorbeeld toegang willen tot persoonlijke en beschermde gegevens van een C ++ - klasse.
C ++ biedt een faciliteit voor toegang tot privé- en beschermde gegevens door middel van een speciale functie genaamd 'vriend' -functie of klasse die we hier in deze tutorial zullen bespreken.
Wat je leert:
- Vriendfunctie in C ++
- Voorbeeld van een vriendfunctie
- Vriend Klasse
- Voordelen / nadelen van vriendfunctie
- Gevolgtrekking
- Aanbevolen literatuur
Vriendfunctie in C ++
Een vriendfunctie in C ++ is een functie die wordt voorafgegaan door het trefwoord “vriend”. Wanneer de functie als vriend is gedeclareerd, heeft deze toegang tot de privé- en beschermde gegevensleden van de klas.
Een vriendfunctie wordt binnen de klas gedeclareerd met een vriend-sleutelwoord voorafgegaan zoals hieronder getoond.
Zoals hierboven getoond, wordt de vriendfunctie gedeclareerd binnen de klasse waarvan de privé- en beschermde gegevensleden toegankelijk zijn. De functie kan overal in het codebestand worden gedefinieerd en we hoeven niet het trefwoord vriend of de scope-resolutie operator te gebruiken.
Er zijn enkele punten die u moet onthouden bij het implementeren van vriendfuncties in ons programma:
- Een vriendfunctie kan worden gedeclareerd in het privé- of openbare gedeelte van de klas.
- Het kan worden aangeroepen als een normale functie zonder het object te gebruiken.
- Een vriendenfunctie valt niet onder de klasse waarvan het een vriend is.
- Een vriendfunctie wordt niet aangeroepen met behulp van het class-object omdat het niet binnen het bereik van de klasse valt.
- Een vriendenfunctie heeft geen directe toegang tot de privé- en beschermde gegevensleden van de klas. Het moet gebruik maken van een klasseobject en vervolgens toegang krijgen tot de leden met behulp van de puntoperator.
- Een vriendfunctie kan een globale functie zijn of een lid van een andere klasse.
Voorbeeld van een vriendfunctie
Laten we een programmeervoorbeeld implementeren om het gebruik van Friend Function beter te begrijpen.
Uitgang:
Oppervlakte = 150
In het bovenstaande programma hebben we een klasvoorbeeld met lengte en breedte van privéleden. We hebben een openbare constructor die de waarden van lengte en breedte initialiseert. Vervolgens hebben we een vriendfunctie “calcArea” die de oppervlakte berekent door rekening te houden met lengte en breedte.
Merk op dat calcArea een vriendenfunctie is en geen deel uitmaakt van de klas. In de hoofdfunctie geven we, na het maken van een object van het klassevoorbeeld, dit door aan de functie calcArea die de oppervlakte berekent en de waarde weergeeft.
Vriend Klasse
Net als bij vriendenfuncties, kunnen we ook een vriendenklas hebben. De vriendenklas heeft toegang tot privé- en beschermde leden van de klas waarvan het een vriend is.
Zoals hierboven afgebeeld, is klasse B een vriend van klasse A. Klasse B heeft dus toegang tot de privé- en beschermde leden van klasse A.
Maar dit betekent niet dat klasse A toegang heeft tot privé- en beschermde leden van klasse B. Merk op dat de vriendschap niet wederzijds is, tenzij we het zo maken.
Evenzo wordt de vriendschap van de klas niet geërfd. Dit betekent dat aangezien klasse B een vriend is van klasse A, het geen vriend zal zijn van de subklassen van klasse A.
Laten we een programmeervoorbeeld nemen om de vriendenklasse te demonstreren.
Uitgang:
Oppervlakte = 150
vragen en antwoorden voor technische sollicitatiegesprekken van bedrijfsanalisten
In dit programma hebben we twee klassen. De klasse 'Area' die de oppervlakte berekent met behulp van de lengte- en breedte-parameters. Merk op dat de velden, het gebied, de lengte en de breedte allemaal privé-leden zijn van het klasgebied.
De volgende klasse die wordt gebruikt, is de “printClass” die het gebied afdrukt dat is berekend door een functie calcArea in de klasse Area. Omdat de leden privé zijn, moeten we printClass een vriend van de Area-klasse maken.
Zodra dat is gebeurd, maken we in de hoofdfunctie een object van de klasse Area, berekenen we het gebied en geven we het object door aan de functie printArea van de klasse printClass om het gebied weer te geven.
Voordelen / nadelen van vriendfunctie
Een voordeel van de vriendenfunctie of klas is dat we toegang hebben tot de privé- en beschermde gegevens van de klas. Bijvoorbeeld, als we een gekoppelde lijst implementeren, kunnen we de gekoppelde lijst klasse maken als een vriend van de knooppuntklasse en toegang krijgen tot de gegevens, aangezien de gekoppelde lijst uit knooppunten bestaat.
Dus in een bepaalde situatie kan het nuttig zijn om een vriendfunctie of klas te gebruiken. Het heeft echter ook enkele nadelen.
Een van de onderscheidende kenmerken van C ++ is inkapseling, d.w.z. bundeling van gegevens en functies die op die gegevens werken, zodat geen enkele externe functie of klasse toegang heeft tot de gegevens. Maar door de vriendfuncties of klas toegang te geven tot de privéleden van een andere klas, compromitteren we eigenlijk de inkapselingsfunctie.
Om dit te voorkomen, moeten we voorzichtig zijn met het gebruik van vriendfuncties of klassen. We moeten ervoor zorgen dat we niet te veel vriendfuncties en klassen in ons programma gebruiken die een totaal compromis sluiten over de inkapseling.
Gevolgtrekking
Hiermee is onze tutorial over vriendenfunctie en klassen in C ++ afgesloten.
Lezers moeten heel voorzichtig zijn bij het gebruik van vriendklassen en -functies alsof het als een zegen voor de programmeur kan werken, het moet ook voorzichtig worden gebruikt, omdat overmatig gebruik van vriendfuncties en klassen de OOP-functie van inkapseling in ons programma in gevaar kan brengen.
In onze aanstaande tutorial zullen we in detail leren over statische functies in C ++.
Bezoek hier om C ++ vanaf het begin te leren.