Introduzione alla funzione Friend in C ++

Una caratteristica unica del programma C ++ è che utilizza l'incapsulamento per mantenere i dati racchiusi insieme a tutte le sue funzioni operative per costituire una singola entità. Ciò garantisce che i dati particolari possano essere accessibili solo dalle attività che vi operano e non da altre attività esterne a questa classe. Quindi, nei casi in cui la classe esterna potrebbe aver bisogno di accedere a questi dati particolari, usiamo questa specifica funzione chiamata funzione "amico". Sappiamo che utilizzando parole chiave come "protetto" e "privato" non possiamo accedere a tali dati al di fuori del suo metodo. Ma per motivi di applicazione in tempo reale, ci sono molti casi in cui potremmo aver bisogno degli stessi dati privati ​​/ protetti e usare quello già dichiarato è sempre più preferibile che crearli molte volte. Vediamo come dichiarare e utilizzare una funzione amico in C ++ in questo articolo.

Una funzione amico durante la dichiarazione è preceduta dalla parola chiave "amico" come mostrato qui:

Sintassi :

class (
private
protected
friend (arguments list);
)
returnDatatype functionName(arguments list)(
//function from which protected and private keywords
//can be accessed from as this is a friend method of className
)
class (
private
protected
friend (arguments list);
)
returnDatatype functionName(arguments list)(
//function from which protected and private keywords
//can be accessed from as this is a friend method of className
)

Come mostrato nel codice precedente, la funzione amico deve essere dichiarata nella stessa classe in cui è stata dichiarata la parola chiave protetta o privata affinché tali dati siano accessibili al di fuori della classe. Questa funzione può essere dichiarata ovunque nell'intero programma proprio come un normale metodo C ++. La definizione della funzione non richiede parole chiave come amici o operatori di risoluzione dell'ambito.

Esempi di funzioni degli amici nel programma C ++

Vediamo un po 'meglio il funzionamento della funzione amico prendendo alcuni esempi di seguito.

Esempio 1

Codice:

/* C++ program which exhibits the working of friend function.*/
#include
using namespace std;
class Weight
(
private:
int kilo;
public:
Weight(): kilo(0) ( )
//Declaration of a friend function
friend int addWeight(Weight);
);
// Defining a friend function
int addWeight(Weight w)
(
//accessing private data from non-member function
w.kilo += 17;
return w.kilo;
)
int main()
(
Weight W;
cout<<"Weight: "<< addWeight(W);
return 0;
)

Produzione:

Qui la funzione amico è il metodo addWeight () che è dichiarato all'interno della classe Weight. Kilo è la parola chiave privata dichiarata all'interno del metodo Weight a cui si accede quindi dalla funzione addWeight. Questo esempio è stato solo per mostrare l'uso di base di una funzione di amico, anche se qui non c'è un utilizzo in tempo reale. Passiamo ora ad approfondire alcuni esempi significativi.

Esempio n. 2

Codice:

#include
using namespace std;
// Forward declaration
class SecondClass;
class FirstClass (
private:
int first_num;
public:
FirstClass(): first_num(12) ( )
// Declaring a friend function
friend int divide(FirstClass, SecondClass);
);
class SecondClass (
private:
int sec_num;
public:
SecondClass(): sec_num(4) ( )
// Another friend declaration
friend int divide(FirstClass, SecondClass);
);
// Function divide() is the friend function of classes FirstClass and SecondClass
// that accesses the member variables first_num and sec_num
int divide(FirstClass fnum, SecondClass snum)
(
return (fnum.first_num / snum.sec_num);
)
int main()
(
FirstClass fnum;
SecondClass snum;
cout<<"The value got by dividing first by second number: "<< divide(fnum, snum);
return 0;
)

Produzione:

In questo esempio, entrambe le classi FirstClass e SecondClass hanno diviso () dichiarato come funzione amico. Quindi questa funzione può accedere ai dati delle variabili private da entrambe le classi. Qui la funzione divide () viene utilizzata per aggiungere variabili private first_num e sec_num di due oggetti fnum e snum e restituisce il suo valore al metodo principale.

Affinché ciò funzioni correttamente, è necessario eseguire una dichiarazione in avanti per SecondClass come mostrato nel codice perché SecondClass è referenziato in FirstClass usando il programma:

friend int divide(FirstClass, SecondClass);

Classe di amici: esiste una classe di amici proprio come la funzione di amico. La classe Friend può anche accedere alle variabili private e protette della classe in quanto è una sua amica.

Sintassi :

class One(
friend class Two;
);
class Two(
);
class One(
friend class Two;
);
class Two(
);
class One(
friend class Two;
);
class Two(
);

Come mostrato sopra, la classe due è un amico della classe uno. Quindi la classe Due può accedere a variabili private e protette della classe Uno. Ma la classe Uno non può accedere alle variabili protette o private della classe Due perché questa non è un'amicizia reciproca. Per amicizia reciproca, dovremmo dichiararlo esplicitamente. Allo stesso modo, questa amicizia della classe non è ereditata, il che significa che la classe Due non deve essere amica delle sottoclassi della classe Uno anche se è amica della classe Uno.

Esempio n. 3

Codice:

#include
#include
using namespace std;
class Perimeter(
int len, brd, perimeter, temp;
public:
Perimeter(int len, int brd):len(len), brd(brd)
()
void calcPerimeter()(
temp = len + brd;
perimeter = 2 * temp;
)
friend class printClass;
);
class printClass(
public:
void printPerimeter(Perimeter a)(
cout<<"Perimeter = "< )
);
int main()(
Perimeter a(10, 15);
a.calcPerimeter();
printClass p;
p.printPerimeter(a);
return 0;
)
#include
#include
using namespace std;
class Perimeter(
int len, brd, perimeter, temp;
public:
Perimeter(int len, int brd):len(len), brd(brd)
()
void calcPerimeter()(
temp = len + brd;
perimeter = 2 * temp;
)
friend class printClass;
);
class printClass(
public:
void printPerimeter(Perimeter a)(
cout<<"Perimeter = "< )
);
int main()(
Perimeter a(10, 15);
a.calcPerimeter();
printClass p;
p.printPerimeter(a);
return 0;
)

Produzione:

In questo codice, abbiamo 2 classi: Classe perimetrale che trova il perimetro utilizzando i valori di lunghezza e larghezza. Le variabili len, brd, perimeter e temp sono tutte variabili private del perimetro della classe. Quindi dobbiamo rendere printClass un amico della classe Perimeter. Questa printClass utilizza il valore del perimetro calcolato nella funzione calcPerimeter () nella classe perimeter. Dato che sono tutti membri privati, dobbiamo rendere printPerimeter un amico della classe Perimeter. Una volta fatto ciò, dobbiamo creare un oggetto nella classe principale per calcolare il perimetro e passare questo oggetto alla classe printPerimeter per visualizzare il perimetro.

Caratteristiche della funzione Amico in C ++

  • Il metodo e la classe a cui è stato dichiarato come amico non devono necessariamente essere gli stessi.
  • Poiché non rientra nell'ambito della rispettiva classe, non può essere chiamato utilizzando il suo oggetto.
  • Può anche essere chiamato proprio come un metodo normale anche senza l'utilizzo dell'oggetto.
  • Può accedere direttamente ai nomi dei membri solo usando il nome dell'oggetto e l'operatore punto appartenenza insieme al nome del membro.
  • Non ci sono restrizioni in quanto è consentito essere dichiarato nella parte privata o pubblica.

Conclusione

Considerando tutte le funzionalità sopra discusse e gli esempi della funzione di amico in C ++, bisogna anche fare attenzione quando si usano le funzioni di un amico con numerose funzioni e classi esterne in quanto può ridurre l'importanza dell'incapsulamento di classi diverse nella programmazione orientata agli oggetti. Quindi può essere sia un vantaggio che una rovina per il programmatore.

Articolo raccomandato

Questa è una guida alla funzione Amico in C ++. Qui discutiamo della funzione Introduzione all'amico in C ++ e dei suoi esempi insieme all'implementazione e all'output del codice. puoi anche consultare i nostri articoli suggeriti per saperne di più -

  1. Funzione ricorsiva in C ++ (esempi)
  2. Le 11 principali funzionalità di C ++
  3. Libreria di apprendimento automatico C ++
  4. Funzione di hash in C con tipi
  5. Funzione di hashing in PHP con sintassi

Categoria: