Forskel mellem Friend-funktion og Friend Class

Forfatter: Laura McKinney
Oprettelsesdato: 1 April 2021
Opdateringsdato: 18 Kan 2024
Anonim
How to make stress your friend | Kelly McGonigal
Video.: How to make stress your friend | Kelly McGonigal

Indhold


Venfunktionen og venklassen er de teknikker, der bruges til at få adgang til de private medlemmer af en klasse ved hjælp af et nøgleord. Den almindelige forskel mellem venefunktion og veneklasse er, at når venefunktionen bruges, kan man få adgang til private klassemedlemmer, men i venneklassen er det kun navnene på veneklassen, der ikke er adgang til de private medlemmer af klassen.

Det ven funktion om det bruges af funktion eller klasse kan give en negativ indvirkning på den objektorienterede ramme, da den svækker indkapsling hvilket er imod objektorienteret paradigme. Dette er grunden til, at venefunktionen skal bruges med omhu, ellers kunne det pause det data skjuler af koden.

Denne venefunktion er hverken kommutativ og heller ikke transitivt. X er en ven af ​​Y afgør ikke, at Y også er 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.


    1. Sammenligningstabel
    2. Definition
    3. Vigtige forskelle
    4. Konklusion

Sammenligningstabel

Grundlag for sammenligningVen FunktionVeneklasse
GrundlæggendeDet er en funktion, der bruges sammen med et venligt nøgleord til at give en ikke-medlem funktion adgang til de private medlemmer af en klasse.Det er en klasse, der bruges sammen med et venhedsnøgleord til at få adgang til de private medlemmer af en anden klasse.
FremsendelseserklæringSkal bruges.Ikke obligatorisk.
BrugEn vensfunktion kan bruges i en situation med overbelastning af operatøren.En vensklasse kan bruges, når der oprettes en klasse øverst i en anden klasse.

Definition af Friend-funktion

Det ven funktion bruges til at få adgang til de private og beskyttede medlemmer af en klasse ved at tillade, at ikke-medlemsfunktionen får adgang. I denne type funktion bruges et venhedsnøgleord før funktionsnavnet på erklæringstidspunktet. Der er nogle restriktive betingelser, der gælder for venefunktion. Den første betingelse er, at venefunktionen ikke arves af en barneklasse. Den anden betingelse er, at lagerklasse-specificeren muligvis ikke er til stede i venefunktion, hvilket betyder, at den ikke kan erklæres som statisk og ekstern.


Venfunktionen kaldes ikke med et påkaldende objekt fra klassen. Eksemplerne på venefunktion er: en global funktion, medlemsfunktion i en klasse, funktionsskabelon kan være en vensfunktion. Lad os forstå det ved hjælp af et eksempel.

#omfatte ved hjælp af navneområde std; klasse første {int data; public: first (int i): data (i) {} ven ugyldig visning (const first & a); }; tomt display (const first & a) {cout << "data =" <ved hjælp af namespace std; klasse først {// erklær en ven klassevenneklasse anden; public: First (): a (0) {} void () {cout << "Resultatet er" << a << endl; } privat: int a; }; klasse Andet {offentligt: ​​ugyldig ændring (Første & yklasse, int x) {yklasse.a = x; }}; int main () Første obj1; Anden obj2; obj1 (.); obj2.change (obj1, 5); obj1 (.); // Output Resultatet er 0 Resultatet er 5

  1. Venefunktion er en funktion, der er i stand til at 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.
  2. En vensfunktion erklæres ved at inkludere dens prototype i klassen, forudse den med nøgleordet ven. Tilsvarende defineres en vensklasse også ved hjælp af nøgleordets ven.
  3. Fremaddeklarationen bruges i tilfælde af vensfunktion i modsætning til, det er ikke nødvendigt at bruge den i veneklasse.

Konklusion

En vensfunktion er påkrævet, når en funktion skal have adgang til to eller flere uafhængige klasser, interne medlemmer. På den anden side er der brug for en vensklasse, 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 ​​denne funktion, er det i så fald bedre at bruge venklasse.