User Tools

Site Tools


appunti3s:funzioni_friend

Differences

This shows you the differences between two versions of the page.


Previous revision
appunti3s:funzioni_friend [2020/06/08 22:19] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +==== Funzioni esterne friend ====
 +A volte si ha la necessità di elaborare contemporaneamente due oggetti di tipo diverso, ma non è possibile creare funzioni che siano membro di due diverse classi. 
 +Queste funzioni possono essere dichiarate anche fuori della classe, ma in tal caso avrebbero diritto di accedere solo agli elementi //public//. Per operare anche sui dati //private// degli oggetti, devono essere dichiarate //friend// all'interno della classe. 
 +<code>
 +class ContoCorrente
 +{
 +friend fun(const ContoCorrente& c);
 +}
 +</code>
  
 +Questo tipo di funzioni non possono essere essere invocate su un oggetto (con la dot notation) come le funzioni membro, quindi non possiedono nemmeno il puntatore //this//. Le funzioni di questo tipo devono necessariamente ricevere l'oggetto in copia o attraverso i reference. In tal caso si può scrivere:
 +
 +<code>
 +void funz(ContoCorrente& c);          // dichiarazione esterna della 
 +                                      //funzione, usando reference</code>
 +<code>
 +funz(mioConto);                 // chiamata della funzione</code>
 +Tuttavia invece di usare le funzioni friend potrebbe essere possibile definire una classe annidata, o un oggetto membro.
 +  * esempio
 +  * esempio di distruttore (necessario solo quando…)
 +  * esempio di overloading (nello stesso namespace)
 +  * esempio di funzione membro che usa o restituisce references ad oggetti
 +  * esempio di costruttore di copia
 +
 +continua qui...
 +
 +[[appunti3s:programmazione procedurale&#classi]]