friend functions c
Lær mere om venfunktioner i C ++ med eksempler.
C ++ understøtter funktionen af indkapsling, hvor dataene er samlet sammen med de funktioner, der fungerer på den for at danne en enkelt enhed. Ved at gøre dette sikrer C ++, at data kun er tilgængelige med de funktioner, der fungerer på det, og ikke for nogen uden for klassen.
Dette er et af de karakteristiske træk ved C ++, der bevarer dataene og forhindrer dem i at lække til omverdenen.
=> Læs gennem Easy C ++ træningsserien.
Men i nogle realtidsapplikationer vil vi nogle gange måske få adgang til data uden for den medfølgende enhed. For eksempel vil en outsider-klasse muligvis få adgang til private og beskyttede data i en C ++ -klasse.
C ++ giver mulighed for at få adgang til private og beskyttede data ved hjælp af en speciel funktion kaldet 'ven' -funktion eller klasse, som vi vil diskutere her i denne vejledning.
Hvad du lærer:
- Venfunktion i C ++
- Eksempel på en venfunktion
- Vensklasse
- Fordele / ulemper ved venfunktion
- Konklusion
- Anbefalet læsning
Venfunktion i C ++
En venfunktion i C ++ er en funktion, der er forud for nøgleordet 'ven'. Når funktionen erklæres som en ven, kan den få adgang til klassens private og beskyttede datamedlemmer.
En venfunktion er erklæret inde i klassen med et vennenøgleord, der er forud som vist nedenfor.
class className{ …… friend returnType functionName(arg list); };
Som vist ovenfor erklæres venfunktionen inden for klassen, hvis private og beskyttede datamedlemmer skal åbnes. Funktionen kan defineres hvor som helst i kodefilen, og vi behøver ikke bruge nøgleordet ven eller omfangsopløsningen, operatøren.
Der er nogle punkter at huske, når du implementerer venfunktioner i vores program:
- En venfunktion kan erklæres i den private eller offentlige sektion af klassen.
- Det kan kaldes som en normal funktion uden at bruge objektet.
- En venfunktion er ikke inden for klassen, som den er en ven af.
- En venfunktion påberåbes ikke ved hjælp af klasseobjektet, da den ikke er inden for klassen.
- En venfunktion kan ikke få direkte adgang til de private og beskyttede datamedlemmer i klassen. Det skal bruge et klasseobjekt og derefter få adgang til medlemmerne ved hjælp af dot-operatoren.
- En venfunktion kan være en global funktion eller et medlem af en anden klasse.
Eksempel på en venfunktion
Lad os implementere et programmeringseksempel for bedre at forstå brugen af venfunktion.
#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 = '< Produktion:
Areal = 150
I ovenstående program har vi en klasseeksempel med private medlemmers længde og bredde. Vi har en offentlig konstruktør, der initialiserer værdierne for længde og bredde. Dernæst har vi en venfunktion 'calcArea', der beregner området ved at tage længde og bredde i betragtning.
Bemærk, at calcArea er en venfunktion og ikke er en del af klassen. Efter oprettelse af et objekt i klasseprøven videregiver vi det i hovedfunktionen til calcArea-funktionen, der beregner arealet og viser værdien.
Vensklasse
Ligesom venfunktioner kan vi også have en venklasse. Venneklasse har adgang til private og beskyttede medlemmer af den klasse, som det er en ven til.
class A{ …… friend class B; }; class B{ …….. };
Som vist ovenfor er klasse B en ven af klasse A. Så klasse B kan få adgang til de private og beskyttede medlemmer af klasse A.
Men dette betyder ikke, at klasse A kan få adgang til private og beskyttede medlemmer af klasse B. Bemærk, at venskabet ikke er gensidigt, medmindre vi gør det.
Tilsvarende er klassens venskab ikke arvet. Dette betyder, at da klasse B er en ven af klasse A, vil den ikke være en ven af underklasser af klasse A.
Lad os tage et programmeringseksempel for at demonstrere venklassen.
#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 = '< Produktion:
Areal = 150
hvad kan jeg åbne en eps-fil med
I dette program har vi to klasser. Klassen “Area”, der beregner området ved hjælp af parametrene for længde og bredde. Bemærk, at felterne, området, længden og bredden alle er private medlemmer af klassen Område.
Den næste klasse, der bruges, er “printClass”, der udskriver det areal, der beregnes af en funktion calcArea i området Class. Da medlemmerne er private, skal vi gøre printClass til en ven af områdeklassen.
Når det er gjort, opretter vi i hovedfunktionen et objekt i områdeklassen, beregner området og sender objektet til printArea-funktionen i printClass-klassen for at få vist området.
Fordele / ulemper ved venfunktion
En fordel ved venfunktionen eller klassen er, at vi kan få adgang til klassens private og beskyttede data. For eksempel, hvis vi implementerer en sammenkædet liste, kan vi oprette den sammenkædede listeklasse som en ven af nodeklassen og få adgang til dens data, da den sammenkædede liste består af noder.
I en bestemt situation kan det således være fordelagtigt at bruge en venfunktion eller klasse. Det har dog også nogle ulemper.
Et af de karakteristiske træk ved C ++ er indkapsling, dvs. bundtning af data og funktioner, der fungerer på disse data sammen, så ingen ekstern funktion eller klasse kan få adgang til dataene. Men ved at give venfunktionerne eller klassen adgang til private medlemmer af en anden klasse, kompromitterer vi faktisk indkapslingsfunktionen.
For at forhindre dette skal vi være forsigtige med at bruge venfunktioner eller klasse. Vi bør sikre, at vi ikke skal bruge for mange venfunktioner og klasser i vores program, som vil gå på kompromis med indkapslingen.
Konklusion
Dette afslutter vores tutorial om venfunktion og klasser i C ++.
Læsere skal være meget forsigtige, når de bruger venneklasser og -funktioner, som om det kan fungere som en velsignelse for programmøren, det skal også bruges med forsigtighed, da overbrug af venfunktioner og klasser kan kompromittere OOP-funktionen i indkapsling i vores program.
I vores kommende tutorial lærer vi mere om statiske funktioner i C ++ i detaljer.
=> Besøg her for at lære C ++ fra bunden.
Anbefalet læsning