Vennefunktionen, hvad enten den bruges af funktion eller klasse, kan fremkalde en negativ indvirkning på de objektorienterede rammer, da det svækker indkapslingen, som er imod det objektorienterede paradigme. Dette er grunden til, at venens funktion skal bruges klogt ellers, det kan ødelægge data skjule koden.
Denne venfunktion er hverken kommutativ eller transitiv . X er en ven af Y, ikke konkluderer, at Y er også en ven af X. Hvis X er en ven af Y og Y er en ven af Z, betyder det ikke, at X er en ven af Z.
Sammenligningstabel
Grundlag for sammenligning | Ven Funktion | Venklasse |
---|---|---|
Grundlæggende | Det er en funktion, der bruges sammen med et venskabsord for at give en ikke-medlemsfunktion adgang til de private medlemmer af en klasse. | Det er en klasse, der bruges sammen med et venskabsord for at få adgang til de private medlemmer af en anden klasse. |
Videresendelsesangivelse | Skal anvendes. | Ikke obligatorisk. |
Brug | En venfunktion kan bruges i nogle tilfælde af overbelastning af operatøren. | En vensklasse kan bruges, når en klasse er oprettet på toppen af en anden klasse. |
Definition af venfunktion
Vennefunktionen bruges til at få adgang til de private og beskyttede medlemmer af en klasse ved at tillade den ikke-medlemsfunktion at få adgang. I denne type funktion bruges et venskabsord til funktionens navn på tidspunktet for erklæringen. Der er nogle restriktive betingelser for venens funktion. Den første betingelse er, at venfunktionen ikke arves af en børneklasse. Den anden betingelse er, at lagerklassespecifikke måske ikke er til stede i venfunktionen, hvilket betyder, at den ikke kan deklareres som statisk og ekstern.
Vennefunktionen kaldes ikke med et opkaldsobjekt af klassen. Eksempler på venfunktion er: En global funktion, medlemsfunktion af en klasse, funktionsskabelon kan være en venfunktion. Lad os forstå det ved hjælp af et eksempel.
# include using namespace std; klasse først {int data; offentligt: første (int i): data (i) {} ven ugyldig visning (const første & a); }; void display (const first & a) {cout << "data =" <Definition af ven klasse
Ligesom vennefunktionen kan vi gøre en klasse til at være en ven til en anden klasse, der omtales som vensklasse . Så vensklassen kan få adgang til private medlemmer defineret i den anden klasse. Det er vigtigt at huske, at vensklassen kun kan få adgang til navnene defineret i den anden klasse i stedet for at arve i anden klasse. Præcis kan medlemmerne af første klasse ikke blive medlemmer af vensklassen. Disse vensklasser bruges sjældent.
Vinklassen kan deklareres i mere end en enkelt klasse. Det betragtes som en kort alternativ metode til venfunktion, fordi vi ved hjælp af dette kan oprette en vensklasse, der kan få adgang til hele data-medlemmerne og fungere i stedet for at oprette flere venfunktioner.
# include using namespace std; klasse først {// erklære en vensklasse vensklasse anden; offentlig: Første (): a (0) {} tomtryk () {cout << "Resultatet er" << a << endl; } privat: int a; }; klasse anden {offentlig: tomrumsændring (første og yclass, int x) {yclass.a = x; }}; int main () // Output Resultatet er 0 Resultatet er 5Nøgleforskelle mellem venskab og vensklasse
- Vennefunktion er en funktion, der kan få adgang til de private og beskyttede medlemmer af en klasse. I modsætning hertil er en vensklasse en klasse, der hjælper med at få adgang til de private medlemmer af en klasse.
- En venfunktion erklæres ved at inkludere prototypen inde i klassen, antecere den med søgeordsvennen. På samme måde defineres en vensklasse også ved hjælp af søgeordskvinde.
- Fremsendelseserklæringen anvendes i tilfælde af venfunktion mod, det er ikke nødvendigt at bruge det i vensklasse.
Konklusion
En venfunktion er nødvendig, når en funktion skal have adgang til to eller flere uafhængige klasser, interne medlemmer. På den anden side er en vensklasse nødvendig, når en klasse kræver adgang til medlemmerne af en anden klasse. Når en funktion med flere medlemmer skal være en ven af den funktion, er det i så fald bedre at bruge vensklasse.