Differences

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

Link to this comparison view

appunti3s:funzioni_friend [2018/04/25 07:55] (current)
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]]
  • appunti3s/funzioni_friend.txt
  • Last modified: 2018/04/25 07:55
  • (external edit)