EN venneklasse kan få adgang til private og beskyttede medlemmer af andre klasser, hvor den er erklæret som en ven. Det er nogle gange nyttigt at give en bestemt klasse adgang til private og beskyttede medlemmer af andre klasser. For eksempel kan en LinkedList-klasse få adgang til private medlemmer af Node.
Vi kan erklære en ven-klasse i C++ ved at bruge ven søgeord.
java sammenligne strenge
Syntaks:
friend class class_name; // declared in the base class>

Venne klasse
Eksempel:
læs csv-filen i javaC++
// C++ Program to demonstrate the // functioning of a friend class #include using namespace std; class GFG { private: int private_variable; protected: int protected_variable; public: GFG() { private_variable = 10; protected_variable = 99; } // friend class declaration friend class F; }; // Here, class F is declared as a // friend inside class GFG. Therefore, // F is a friend of class GFG. Class F // can access the private members of // class GFG. class F { public: void display(GFG& t) { cout << 'The value of Private Variable = ' << t.private_variable << endl; cout << 'The value of Protected Variable = ' << t.protected_variable; } }; // Driver code int main() { GFG g; F fri; fri.display(g); return 0; }> Produktion
The value of Private Variable = 10 The value of Protected Variable = 99>
Bemærk: Vi kan erklære venneklasse eller fungere hvor som helst i basisklassens krop, uanset om den er privat, beskyttet eller offentlig blok. Det virker lige meget.
Ven funktion
Ligesom en venneklasse kan en vennefunktion tildeles særlig adgang til private og beskyttede medlemmer af en klasse i C++. De er ikke klassens medlemsfunktioner, men kan få adgang til og manipulere de private og beskyttede medlemmer af den klasse, for de er erklæret som venner.
En vennefunktion kan være:
- En global funktion
- En medlemsfunktion af en anden klasse

Ven-funktion i C++
Syntaks:
friend return_type function_name (arguments); // for a global function or friend return_type class_name::function_name (arguments); // for a member function of another class>

Ven Funktion Syntaks
1. Global funktion som venfunktion
Vi kan erklære enhver global funktion som en venfunktion. Følgende eksempel viser, hvordan man erklærer en global funktion som en venfunktion i C++:
i java
Eksempel:
npm cache ryddesC++
// C++ program to create a global function as a friend // function of some class #include using namespace std; class base { private: int private_variable; protected: int protected_variable; public: base() { private_variable = 10; protected_variable = 99; } // friend function declaration friend void friendFunction(base& obj); }; // friend function definition void friendFunction(base& obj) { cout << 'Private Variable: ' << obj.private_variable << endl; cout << 'Protected Variable: ' << obj.protected_variable; } // driver code int main() { base object1; friendFunction(object1); return 0; }> Produktion
Private Variable: 10 Protected Variable: 99>
I ovenstående eksempel har vi brugt en global funktion som en venfunktion. I det næste eksempel vil vi bruge en medlemsfunktion af en anden klasse som en vennefunktion.
2. Medlemsfunktion af en anden klasse som vennefunktion
Vi kan også erklære en medlemsfunktion af en anden klasse som en venfunktion i C++. Følgende eksempel viser, hvordan man bruger en medlemsfunktion af en anden klasse som en venfunktion i C++:
Eksempel:
C++ // C++ program to create a member function of another class // as a friend function #include using namespace std; class base; // forward definition needed // another class in which function is declared class anotherClass { public: void memberFunction(base& obj); }; // base class for which friend is declared class base { private: int private_variable; protected: int protected_variable; public: base() { private_variable = 10; protected_variable = 99; } // friend function declaration friend void anotherClass::memberFunction(base&); }; // friend function definition void anotherClass::memberFunction(base& obj) { cout << 'Private Variable: ' << obj.private_variable << endl; cout << 'Protected Variable: ' << obj.protected_variable; } // driver code int main() { base object1; anotherClass object2; object2.memberFunction(object1); return 0; }> Produktion
Private Variable: 10 Protected Variable: 99>
Bemærk : Rækkefølgen, hvori vi definerer venfunktionen for en anden klasse, er vigtig og bør tages hånd om. Vi skal altid definere begge klasser før funktionsdefinitionen. Det er derfor, vi har brugt funktionsdefinition uden for klassen.
Funktioner af Friend Functions
- En vennefunktion er en speciel funktion i C++, som på trods af ikke at være medlem af en klasse har privilegiet til at adgang det private og beskyttede data af en klasse.
- En vennefunktion er en ikke-medlemsfunktion eller almindelig funktion af en klasse, der erklæres som en ven ved hjælp af nøgleordet ven inde i klassen. Ved at erklære en funktion som en ven, gives alle adgangstilladelser til funktionen.
- Søgeordet ven placeres kun i funktionserklæringen for venfunktionen og ikke i funktionsdefinition eller opkald.
- En vennefunktion kaldes som en almindelig funktion. Det kan ikke kaldes ved hjælp af objektnavnet og prikoperatoren. Det kan dog acceptere objektet som et argument, hvis værdi den ønsker at få adgang til.
- En vennefunktion kan erklæres i enhver sektion af klassen, dvs. offentlig eller privat eller beskyttet.
Nedenfor er nogle flere eksempler på vennefunktioner i forskellige scenarier:
En funktionsvenlig til flere klasser
C++ // C++ Program to demonstrate // how friend functions work as // a bridge between the classes #include using namespace std; // Forward declaration class ABC; class XYZ { int x; public: void set_data(int a) { x = a; } friend void max(XYZ, ABC); }; class ABC { int y; public: void set_data(int a) { y = a; } friend void max(XYZ, ABC); }; void max(XYZ t1, ABC t2) { if (t1.x>t2.y) cout<< t1.x; else cout << t2.y; } // Driver code int main() { ABC _abc; XYZ _xyz; _xyz.set_data(20); _abc.set_data(35); // calling friend function max(_xyz, _abc); return 0; }> Produktion
35>
Vennefunktionen giver os en måde at få adgang til private data, men den har også sine ulemper. Følgende er listen over fordele og ulemper ved vennefunktioner i C++:
Fordele ved Friend Functions
- En vennefunktion er i stand til at få adgang til medlemmer uden at skulle arve klassen.
- Vennefunktionen fungerer som en bro mellem to klasser ved at få adgang til deres private data.
- Den kan bruges til at øge alsidigheden af overbelastede operatører.
- Det kan erklæres enten i den offentlige eller private eller beskyttede del af klassen.
Ulemper ved Friend Functions
- Vennefunktioner har adgang til private medlemmer af en klasse uden for klassen, hvilket overtræder loven om dataskjul.
- Ven-funktioner kan ikke udføre nogen run-time polymorfi i deres medlemmer.
Vigtige punkter om vennefunktioner og klasser
- Venner bør kun bruges til begrænsede formål. For mange funktioner eller eksterne klasser erklæres som venner af en klasse med beskyttet eller privat dataadgang mindsker værdien af indkapsling af separate klasser i objektorienteret programmering.
- Venskab er ikke gensidigt . Hvis klasse A er en ven af B, bliver B ikke automatisk ven af A.
- Venskab går ikke i arv. (Se det her for flere detaljer)
- Begrebet venner er ikke i Java.