L'operatore di assegnamento
L'assegnamento e` un operatore molto particolare, la sua semantica classica
e` quella di modificare il valore dell'oggetto cui e` applicato con quello ricevuto
come parametro e restituire poi tale valore al fine di consentire espressioni
del tipo
A = B = C = < Valore >
che e` equivalente a
A = (B = (C = < Valore >));
Non lo si confonda con il costruttore di copia: il costruttore e` utilizzato
per costruire un nuovo oggetto inizializzandolo con il valore di un altro, l'assegnamento
viene utilizzato su oggetti gia` costruiti.
Complex C = B; // Costruttore di copia
/* ... */
C = D; // Assegnamento
Un'altra particolarita` di questo operatore lo rende simile al costruttore (oltre
al fatto che deve essere una funzione membro): se in una classe non ne viene
definito uno nella forma X::operator=(X&) , il compilatore ne
fornisce uno che esegue la copia bit a bit. Lo standard stabilisce che sia il
costruttore di copia che l'operatore di assegnamento forniti dal compilatore
debbano eseguire non una copia bit a bit, ma una inizializzazione o assegnamento
a livello di membri chiamando il costruttore di copia o l'operatore di assegnamento
relativi al tipo di quel membro. In ogni caso comunque e necessario definire
esplicitamente sia l'operatore di assegnamento che il costruttore di copia ogni
qual volta la classe contenga puntatori, onde evitare spiacevoli condivisioni
di memoria.
Notate infine che, come per le funzioni, anche per un operatore e` possibile
avere piu` versioni overloaded; in particolare una classe puo` dichiarare piu`
operatori di assegnamento, ma e` quello di cui sopra che il compilatore fornisce
quando manca.
|