Aanbevolen, 2024

Editor'S Choice

Verschil tussen vriendfunctie en vriendklasse

De Friend-functie en de Friend Class zijn de technieken die worden gebruikt om toegang te krijgen tot de privé-leden van een klas door het gebruik van een vriendsleutelwoord. Het algemene verschil tussen vriendfunctie en vriendenklasse is dat wanneer de vriendenfunctie wordt gebruikt de privéklassen kunnen worden geopend maar in de vriendenklasse worden alleen de namen van de vriendenklasse benaderd en niet de privéleden van de klas.

De friend-functie, of deze nu door de functie of klasse wordt gebruikt, kan een negatieve invloed hebben op het objectgeoriënteerde framework, omdat het de inkapseling verzwakt die tegen het objectgeoriënteerde paradigma is. Dit is de reden waarom de functie vriend verstandig moet worden gebruikt, anders zou het de gegevens kunnen verbergen die de code verbergen .

Deze vriendenfunctie is niet commutatief en ook niet transitief . X is een vriend van Y en leidt niet af dat Y ook een vriend van X is. Als X een vriend van Y is en Y een vriend van Z is, betekent dit niet dat X een vriend van Z is.

Vergelijkingstabel

Basis voor vergelijkingVriend FunctieVriendklasse
basis-Het is een functie die wordt gebruikt met een vriendsleutelwoord om een ​​niet-ledenfunctie toegang te verlenen tot de privéleden van een klas.Het is een klasse die wordt gebruikt met een trefwoord voor vrienden om toegang te krijgen tot de privé-leden van een andere klas.
DoorstuurverklaringMoet gebruikt worden.Niet verplicht.
GebruikEen vriendenfunctie kan worden gebruikt in een situatie waarin de operator overbelast wordt.Een vriendenklasse kan worden gebruikt wanneer een klas wordt gemaakt op de top van een andere klas.

Definitie van vriendfunctie

De vriendfunctie wordt gebruikt om toegang te krijgen tot de private en beschermde leden van een klasse door de niet-lidfunctie toegang te verlenen. In dit type functie wordt een trefwoord voor vrienden gebruikt vóór de functienaam op het moment van de declaratie. Er zijn enkele beperkende voorwaarden toegepast op de vriendenfunctie. De eerste voorwaarde is dat de vriendfunctie niet wordt overgenomen door een onderliggende klasse. De tweede voorwaarde is dat de specificatie voor de opslagklasse mogelijk niet aanwezig is in de vriendenfunctie, wat betekent dat deze niet als statisch en extern kan worden verklaard.

De vriendfunctie wordt niet aangeroepen met een aanroepend object van de klasse. De voorbeelden van vriendenfunctie zijn: een globale functie, lidfunctie van een klasse, functiesjabloon kan een vriendenfunctie zijn. Laten we het begrijpen met behulp van een voorbeeld.

 # include namespace std; klasse eerste {int data; public: first (int i): data (i) {} friend void display (const first & a); }; void display (const first & a) {cout << "data =" < 

Definitie van Vriendklasse

Net als bij de vriendenfunctie kunnen we van een klas een vriend maken van een andere klas die de vriendenklasse wordt genoemd . Zodat de vriendenklasse toegang kan krijgen tot privéleden die in de andere klas zijn gedefinieerd. Het is belangrijk om te onthouden dat vriendenklasse alleen toegang heeft tot de namen die in de andere klasse zijn gedefinieerd in plaats van andere klassen te overerven. Juist, de leden van de eerste klas kunnen geen lid worden van de vriendenklas. Deze vriendenklassen worden zelden gebruikt.

De vriendenklasse kan in meer dan één klas worden gedeclareerd. Het wordt beschouwd als een korte alternatieve methode voor de vriendfunctie, omdat we met behulp hiervan een vriendenklasse kunnen maken die toegang heeft tot de hele gegevensleden en functie in plaats van meerdere vriendenfuncties te maken.

 # include namespace std; klas Eerste {// Verklaar een vriend klasse vriend klas Tweede; public: First (): a (0) {} void print () {cout << "Het resultaat is" << a << endl; } privé: int a; }; class Second {public: void change (First & yclass, int x) {yclass.a = x; }}; int main () // Uitvoer Het resultaat is 0 Het resultaat is 5 

Belangrijkste verschillen tussen vriendfunctie en vriendklasse

  1. Friend-functie is een functie die toegang heeft tot de private en beschermde leden van een klasse. Een vriendenklasse daarentegen is een klasse die helpt bij het benaderen van de privé-leden van een klas.
  2. Een vriendenfunctie wordt gedeclareerd door het prototype in de klas op te nemen, dit voorafgaat aan de trefwoordvriend. Evenzo wordt een vriendenklasse ook gedefinieerd met behulp van trefwoordvriend.
  3. De forward-declaratie wordt gebruikt in het geval van een vriend-functie als tegen, het is niet nodig om deze in de vriendenklasse te gebruiken.

Conclusie

Een vriendenfunctie is vereist wanneer een functie toegang moet hebben tot twee of meer onafhankelijke klassen, interne leden. Aan de andere kant is een vriendenklasse nodig wanneer een klasse toegang vereist tot de leden van een andere klas. Wanneer een functie met meerdere leden een vriend van die functie moet zijn, is het in dat geval beter om de vriendenklasse te gebruiken.

Top