friend functions c
Lær mer om vennefunksjoner i C ++ med eksempler.
C ++ støtter funksjonen til innkapsling der dataene er samlet sammen med funksjonene som fungerer på den for å danne en enkelt enhet. Ved å gjøre dette sørger C ++ for at data bare er tilgjengelig av funksjonene som fungerer på den og ikke for noen utenfor klassen.
Dette er en av de særtrekkene ved C ++ som bevarer dataene og forhindrer at de lekker til omverdenen.
=> Les gjennom Easy C ++ Training Series.
Men i noen sanntidsapplikasjoner kan det hende vi ønsker å få tilgang til data utenfor den medfølgende enheten. For eksempel kan en utenforstående klasse ønske å få tilgang til private og beskyttede data i en C ++ - klasse.
C ++ gir en mulighet for tilgang til private og beskyttede data ved hjelp av en spesiell funksjon kalt 'venn' -funksjon eller klasse som vi vil diskutere her i denne opplæringen.
Hva du vil lære:
- Vennefunksjon i C ++
- Eksempel på en vennefunksjon
- Venneklasse
- Fordeler / ulemper med vennefunksjon
- Konklusjon
- Anbefalt lesing
Vennefunksjon i C ++
En vennefunksjon i C ++ er en funksjon som går foran nøkkelordet 'venn'. Når funksjonen er erklært som en venn, kan den få tilgang til de private og beskyttede datamedlemmene i klassen.
En vennfunksjon er erklært inne i klassen med et vennenøkkelord som vist nedenfor.
class className{ …… friend returnType functionName(arg list); };
Som vist ovenfor blir vennefunksjonen erklært i klassen hvis private og beskyttede datamedlemmer skal nås. Funksjonen kan defineres hvor som helst i kodefilen, og vi trenger ikke bruke nøkkelordet venn eller omfangsoppløsning, operatør.
Det er noen poeng å huske når du implementerer vennefunksjoner i programmet vårt:
- En vennfunksjon kan erklæres i den private eller offentlige delen av klassen.
- Det kan kalles som en normal funksjon uten å bruke objektet.
- En vennefunksjon er ikke innenfor klassen, som den er en venn av.
- En vennefunksjon påkalles ikke ved hjelp av klasseobjektet, da den ikke er i klassen.
- En vennefunksjon har ikke direkte tilgang til de private og beskyttede dataene i klassen. Det må gjøre bruk av et klasseobjekt og deretter få tilgang til medlemmene ved hjelp av prikkoperatøren.
- En vennfunksjon kan være en global funksjon eller et medlem av en annen klasse.
Eksempel på en vennefunksjon
La oss implementere et programmeringseksempel for bedre å forstå bruken av vennefunksjon.
#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 = '< Produksjon:
Areal = 150
I programmet ovenfor har vi et klasseprøve med private medlemmers lengde og bredde. Vi har en offentlig konstruktør som initialiserer verdiene for lengde og bredde. Deretter har vi en vennefunksjon “calcArea” som beregner området ved å ta hensyn til lengde og bredde.
Merk at calcArea er en vennefunksjon og ikke er en del av klassen. I hovedfunksjonen, etter å ha opprettet et objekt av klasseprøven, sender vi det til calcArea-funksjonen som beregner området og viser verdien.
Venneklasse
Akkurat som vennefunksjoner, kan vi også ha en venneklasse. Venneklasse har tilgang til private og beskyttede medlemmer av klassen som det er en venn til.
class A{ …… friend class B; }; class B{ …….. };
Som avbildet ovenfor er klasse B en venn av klasse A. Så klasse B kan få tilgang til de private og beskyttede medlemmene i klasse A.
Men dette betyr ikke at klasse A har tilgang til private og beskyttede medlemmer av klasse B. Merk at vennskapet ikke er gjensidig med mindre vi gjør det slik.
Tilsvarende er ikke vennskapet til klassen arvet. Dette betyr at ettersom klasse B er en venn av klasse A, vil den ikke være en venn av underklassene av klasse A.
La oss ta et programmeringseksempel for å demonstrere venneklassen.
#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 = '< Produksjon:
Areal = 150
lag en midlertidig falsk e-postadresse
I dette programmet har vi to klasser. Klassen “Areal” som beregner arealet ved hjelp av lengdeparametrene. Merk at feltene, arealet, lengden og bredden alle er private medlemmer av klassen Area.
Den neste klassen som brukes er 'printClass' som skriver ut arealet beregnet av en funksjon calcArea i Area-klassen. Siden medlemmene er private, må vi gjøre printClass til en venn av områdeklassen.
Når det er gjort, oppretter vi i hovedfunksjonen et objekt av områdeklassen, beregner området og sender objektet til printArea-funksjonen til printClass-klassen for å vise området.
Fordeler / ulemper med vennefunksjon
En fordel med vennefunksjonen eller klassen er at vi kan få tilgang til klassens private og beskyttede data. For eksempel, hvis vi implementerer en koblet liste, så kan vi lage den koblede listeklassen som en venn av nodeklassen og få tilgang til dens data ettersom den koblede listen består av noder.
Dermed kan det i en viss situasjon vise seg å være fordelaktig å bruke en vennfunksjon eller klasse. Imidlertid har det også noen ulemper.
En av de karakteristiske egenskapene til C ++ er innkapsling, dvs. samling av data og funksjoner som fungerer på dataene sammen, slik at ingen utenforliggende funksjon eller klasse kan få tilgang til dataene. Men ved å la vennefunksjonene eller klassen få tilgang til de private medlemmene i en annen klasse, kompromitterer vi faktisk innkapslingsfunksjonen.
For å forhindre dette, bør vi være forsiktige med å bruke vennefunksjoner eller klasse. Vi bør sørge for at vi ikke bruker for mange vennefunksjoner og klasser i programmet vårt som vil kompromittere innkapslingen.
Konklusjon
Dette avslutter opplæringen vår om vennefunksjon og klasser i C ++.
Leserne må være veldig forsiktige når de bruker venneklasser og -funksjoner som om det kan fungere som en velsignelse for programmereren. Det må også brukes forsiktig, ettersom overbruk av vennefunksjoner og klasser kan kompromittere OOP-funksjonen til innkapsling i vårt program.
I vår kommende opplæring vil vi lære om statiske funksjoner i C ++ i detalj.
=> Besøk her for å lære C ++ fra grunnen.
Anbefalt lesing