Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    5

    Classi e return *this C++

    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!

    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...

    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?

    Grazie a tutti

  2. #2

    Re: Classi e return *this C++

    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.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    5
    Un grazie enorme! Sulle slide/libro che avevo l'argomento non è trattato nei migliori dei modi. Ora ho le ideeee molto piu chiare^^

  4. #4
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.