Sei sulla pagina 1di 1

Il tipo reference

17 marzo 2006

Marco Altese

Il C++ fornisce una forma di chiamata per indirizzo che persino pi semplice da utilizzare rispetto ai puntatori: il tipo reference. Allo stesso modo di una variabile puntatore, il tipo reference fa riferimento alla locazione di memoria di unaltra variabile, ma come una comune variabile, non richiede nessun operatore specifico di deindirizzamento. La sintassi della variabile reference la seguente:
i n tr i s u l t a t o=6 ; i n t &r e f _ r i s u l t a t o=r i s u l t a t o ;

Lesempio precedente definisce la variabile reference ref_risultato e le assegna la variabile rusultato. Adesso possibile fare riferimento alla stessa locazione in due modi: tramite risultato e tramite rif_risultato. Poich entrambe le variabili puntano alla stessa locazione di memoria, esse rappresentano dunque la stessa variabile. E questo il motivo per cui una variabile reference viene anche chiamata variabile alias. Quindi, ogni assegnamento fatto su ref_risultato si rifletter anche su risultato e viceversa. Attenzione. E sempre necessario inizializzare una variabile di tipo reference. Ad esempio non si sarebbe potuto scrivere semplicemente:
i n t &r e f _ r i s u l t a t o ;/ /E r r o r e !

Il tipo reference, infatti, ha una restrizione che lo distingue dalle variabili puntatore: bisogna sempre definire il valore del tipo refererence al momento della dichiarazione e tale associazione non pu essere pi modificata durante tutta lesecuzione del programma. Si tenga inoltre presente che non possibile assegnare ad una variabile reference il valore NULL, utilizzato invece per i puntatori. Il vantaggio, facilmente visibile, del tipo reference rispetto ai puntatori rappresentato dal fatto che una variabile reference, dopo la sua definizione, va trattata esattamente allo stesso modo di una variabile normale e non necessita degli operatori di indirizzamento e deindirizzamento utilizzati dai puntatori.

Lezione:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52