
La caratteristica amico se usata dalla funzione o dalla classe può produrre un impatto negativo sulla struttura orientata agli oggetti in quanto indebolisce l' incapsulamento che è contro il paradigma orientato agli oggetti . Questo è il motivo per cui la funzione amico deve essere usata saggiamente altrimenti potrebbe rompere l' occultamento dei dati del codice.
Questa funzione amico non è commutativa e né transitiva . X è un amico di Y non deduce che Y sia anche un amico di X. Se X è un amico di Y e Y è un amico di Z, non implica che X sia un amico di Z.
Grafico comparativo
Base per il confronto | Funzione Amica | Amico di classe |
---|---|---|
Di base | È una funzione utilizzata con una parola chiave friend per garantire a una funzione non membro l'accesso ai membri privati di una classe. | È una classe utilizzata con una parola chiave friend per accedere ai membri privati di un'altra classe. |
Dichiarazione anticipata | Deve essere usato. | Non obbligatorio. |
Uso | Una funzione amico può essere utilizzata in alcune situazioni di sovraccarico dell'operatore. | Una classe friend può essere utilizzata quando una classe viene creata nella parte superiore di un'altra classe. |
Definizione della funzione amico
La funzione friend viene utilizzata per accedere ai membri privati e protetti di una classe consentendo alla funzione non membro di accedere. In questo tipo di funzione, una parola chiave friend viene utilizzata prima del nome della funzione al momento della dichiarazione. Ci sono alcune condizioni restrittive applicate alla funzione amico. La prima condizione è che la funzione amico non sia ereditata da una classe figlia. La seconda condizione è che lo specificatore della classe di memoria potrebbe non essere presente nella funzione friend, il che significa che non può essere dichiarato come statico ed extern.
La funzione friend non viene chiamata con un oggetto invocante della classe. Gli esempi di funzione amico sono: una funzione globale, una funzione membro di una classe, un modello funzione può essere una funzione amico. Comprendiamolo con l'aiuto di un esempio.
# include using namespace std; class first {int data; public: first (int i): data (i) {} friend void display (const first & a); }; display vuoto (const first & a) {cout << "data =" <Definizione della classe di amici
Simile alla funzione amico, possiamo rendere una classe un amico di un'altra classe che viene chiamata classe amica . In modo che la classe friend possa accedere ai membri privati definiti all'interno dell'altra classe. È importante ricordare che la classe friend può solo accedere ai nomi definiti all'interno dell'altra classe invece di ereditare un'altra classe. Precisamente, i membri della prima classe non possono diventare membri della classe di amici. Queste classi di amici sono usate raramente.
La classe di amici può essere dichiarata in più di una singola classe. È considerato un metodo alternativo breve per la funzione amico, poiché con l'aiuto di questo possiamo creare una classe di amici che può accedere all'intero membro e alla funzione dati anziché creare più funzioni amico.
# include using namespace std; class First {// Dichiara un amico classe class friend Second; public: First (): a (0) {} void print () {cout << "Il risultato è" << a << endl; } private: int a; }; class Second {public: void change (First e yclass, int x) {yclass.a = x; }}; int main () // Output Il risultato è 0 Il risultato è 5Differenze chiave tra la funzione amica e la classe amica
- La funzione amico è una funzione in grado di accedere ai membri privati e protetti di una classe. Al contrario, una classe di amici è una classe che aiuta ad accedere ai membri privati di una classe.
- Una funzione amico viene dichiarata includendo il suo prototipo all'interno della classe, antecedente con la parola chiave amico. Allo stesso modo, una classe di amici viene anche definita usando la parola chiave friend.
- La dichiarazione diretta è usata in caso di funzione amico, non è necessario usarla nella classe amico.
Conclusione
È necessaria una funzione di amicizia quando una funzione deve accedere a due o più classi indipendenti, membri interni. D'altra parte, una classe di amici è necessaria quando una classe richiede l'accesso ai membri di un'altra classe. Quando una funzione membro multiplo deve essere amica di quella funzione, in tal caso, è meglio usare la classe friend.