Originariamente inviato da valder
Salve ragazzi,avrei dei problemi con questo argomento. Non ho capito perchè quando in una classe per esempio ridefinisco un operatore che sia =,+=,-= la funzione deve essere tipo nomeclasse& operator per poi ritornare il this...mentre per gli altri operatori questo non è necessario!
Per consentire la concatenazione degli assegnamenti. Se gli operatori di assegnamento non restituissero l'oggetto che si trova alla sinistra dell'uguale non sarebbe possibile scrivere codice come
codice:
a=b=c=d;
che va letto come:
codice:
a=(b=(c=d));
Vedi bene che, se non venisse restituito l'oggetto alla sinistra dell'uguale, la concatenazione di assegnamenti non funzionerebbe.
E inoltre,perchè quando per esempio,aggiungo un elemento in una lista all'interno di una classe,perchè a volte trovo che la funzione che è dedicata a questa funzione è di tipo void ,altre di tipo nomeclasse& per poi anche qui ritornare alla fine il this...
Questo dipende dalle scelte di chi ha implementato il metodo in questione...
Ma se questa funzione è definita nella parte pubblica,che senza ha ritornare l'oggetto generico,se alla fine ogni modifica che apporto alla lista(puntatori in testa ecc)riguardano direttamente i membri della classe?
In genere è sempre per consentire una sintassi più "snella" e "concatenare" le operazioni: se io faccio sì che il metodo di aggiunta di un elemento restituisca ancora un reference alla lista posso scrivere:
codice:
lista.aggiungi(a).aggiungi(b).aggiungi(c);
invece di stare a scrivere:
codice:
lista.aggiungi(a);
lista.aggiungi(b)
lista.aggiungi(c);
È sostanzialmente quello che si usa chiamare "zucchero sintattico" - non è nulla di indispensabile, ma consente di scrivere il codice in maniera più comoda.