friend functions c
Lär dig mer om vänfunktioner i C ++ med exempel.
C ++ stöder funktionen för inkapsling där data buntas tillsammans med funktionerna som fungerar på den för att bilda en enda enhet. Genom att göra detta säkerställer C ++ att data endast är tillgänglig för funktionerna som fungerar på den och inte för någon utanför klassen.
Detta är en av de utmärkande egenskaperna hos C ++ som bevarar data och förhindrar att den läcker ut till omvärlden.
=> Läs igenom Easy C ++ Training Series.
Men i vissa realtidsapplikationer kanske vi ibland vill komma åt data utanför den medföljande enheten. Exempelvis kan en utomstående klass komma åt privata och skyddade data i en C ++ - klass.
C ++ tillhandahåller en möjlighet för åtkomst till privata och skyddade data med hjälp av en speciell funktion som kallas 'vän' -funktion eller klass som vi kommer att diskutera här i den här handledningen.
Vad du kommer att lära dig:
- Vänfunktion i C ++
- Exempel på en vänfunktion
- Vänklass
- Fördelar / nackdelar med vänfunktion
- Slutsats
- Rekommenderad läsning
Vänfunktion i C ++
En vänfunktion i C ++ är en funktion som föregås av nyckelordet 'vän'. När funktionen deklareras som en vän kan den komma åt privata och skyddade datamedlemmar i klassen.
En vänfunktion deklareras inuti klassen med ett vänordssökord som visas nedan.
class className{ …… friend returnType functionName(arg list); };
Som visas ovan deklareras vänfunktionen i klassen vars privata och skyddade datamedlemmar ska nås. Funktionen kan definieras var som helst i kodfilen och vi behöver inte använda nyckelordsvän eller omfångsupplösning, operatör.
Det finns några punkter att komma ihåg när du implementerar vänfunktioner i vårt program:
- En vänfunktion kan deklareras i den privata eller offentliga delen av klassen.
- Det kan kallas som en normal funktion utan att använda objektet.
- En vänfunktion ingår inte i klassen, varav den är en vän.
- En vänfunktion åberopas inte med hjälp av klassobjektet eftersom den inte ligger inom klassens omfång.
- En vänfunktion kan inte komma åt de privata och skyddade datamedlemmarna i klassen direkt. Det måste använda ett klassobjekt och sedan komma åt medlemmarna med dot-operatören.
- En vänfunktion kan vara en global funktion eller medlem i en annan klass.
Exempel på en vänfunktion
Låt oss implementera ett programmeringsexempel för att bättre förstå användningen av Friend Function.
#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:
Area = 150
I programmet ovan har vi ett klassprov med privata medlemmars längd och bredd. Vi har en offentlig konstruktör som initialiserar värdena längd och bredd. Därefter har vi en vänfunktion 'calcArea' som beräknar området genom att ta hänsyn till längd och bredd.
Observera att calcArea är en vänfunktion och inte ingår i klassen. I huvudfunktionen, efter att ha skapat ett objekt av klassprovet, skickar vi det till calcArea-funktionen som beräknar område och visar värdet.
Vänklass
Precis som vänfunktioner kan vi också ha en vänklass. Vänklassen kan komma åt privata och skyddade medlemmar i den klass som den är en vän till.
class A{ …… friend class B; }; class B{ …….. };
Som avbildat ovan är klass B en vän till klass A. Så klass B kan komma åt privata och skyddade medlemmar i klass A.
Men det betyder inte att klass A kan komma åt privata och skyddade medlemmar i klass B. Observera att vänskapen inte är ömsesidig om vi inte gör det.
På samma sätt är klassens vänskap inte ärvt. Detta innebär att eftersom klass B är en vän till klass A kommer det inte att vara en vän till underklasserna i klass A.
Låt oss ta ett programmeringsexempel för att visa vänklassen.
#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:
Area = 150
skapa en tillfällig falsk e-postadress
I det här programmet har vi två klasser. Klassen ”Area” som beräknar området med hjälp av parametrarna för längd och bredd. Observera att fälten, området, längden och bredden alla är privata medlemmar i klassen Area.
Nästa klass som används är “printClass” som skriver ut det område som beräknas av en funktion calcArea i området Class. Eftersom medlemmarna är privata måste vi göra printClass till en vän i området.
När det är klart skapar vi ett objekt i Area-klassen i huvudfunktionen, beräknar området och skickar objektet till printArea-funktionen i printClass-klassen för att visa området.
Fördelar / nackdelar med vänfunktion
En fördel med vänfunktionen eller klassen är att vi kan komma åt klassens privata och skyddade data. Till exempel, om vi implementerar en länkad lista kan vi göra den länkade listklassen till en vän till nodklassen och få åtkomst till dess data eftersom den länkade listan består av noder.
I en viss situation kan det därför vara fördelaktigt att använda en vänfunktion eller klass. Det har dock också några nackdelar.
En av de särdrag som kännetecknar C ++ är inkapsling, d.v.s. buntning av data och funktioner som fungerar på dessa data tillsammans så att ingen extern funktion eller klass kan komma åt data. Men genom att låta vänfunktionerna eller klassen få tillgång till privata medlemmar i en annan klass komprometterar vi faktiskt inkapslingsfunktionen.
För att förhindra detta bör vi vara försiktiga med att använda vänfunktioner eller klass. Vi bör se till att vi inte ska använda för många vänfunktioner och klasser i vårt program som helt kommer att kompromissa med inkapslingen.
Slutsats
Detta avslutar vår handledning om vänfunktion och klasser i C ++.
Läsare måste vara mycket försiktiga när de använder vänklasser och funktioner som om det kan fungera som en välsignelse för programmeraren, det måste också användas med försiktighet, eftersom överanvändning av vänfunktioner och klasser kan äventyra OOP-funktionen i inkapsling i vårt program.
I vår kommande handledning kommer vi att lära oss mer om statiska funktioner i C ++ i detalj.
=> Besök här för att lära dig C ++ från Scratch.
Rekommenderad läsning