Variabili reference e overload operatori

di il
2 risposte

Variabili reference e overload operatori

Salve, in C++ mi hanno spiegato l'overload dell'operatore = e mi è stato proposto questo esempio.
    Dado &Dado::operator=(const Dado& altro)
    {
        numeroFacce=altro.numeroFacce;
        valore=altro.valore;
        for(int i=0;i<10;i++)
            dati[i]=altro.dati[i];
        return *this;
    }
numeroFacce,valore e dati sono variabili dello stato interno.
Non credo di aver ben afferrato il concetto di Dado&.
Non ho capito se Dado& è un indirizzo e quindi un puntatore o meno.
Io credo di si però allora dovrei correggere il codice con return this perché il metodo dovrebbe restituire un indirizzo.
Se faccio cosi però mi da errore e allora vuol dire che tutto il mio ragionamento è sbagliato.
Inoltre non capisco come si possa fare
valore=altro.valore
Lo potrei fare se altro fosse un oggetto.
Ma la variabile altro non contiene un indirizzo? E' definita come Dado&altro nelle parentesi del metodo.
Credo di avere un po' di confusione in testa fra la variabile puntatore e la variabile reference
grazie

2 Risposte

  • Re: Variabili reference e overload operatori

    La spiegazione potrebbe andare per le lunghe, ma riduciamola all'osso.

    Tu hai un oggetto, diciamo un intero
    
    int i = 0;
    
    Di i vuoi avere il puntatore:
    
    int i = 0;
    int* p = &i;
    
    Ora vuoi usare il puntatore p per modificare il valore dell'oggetto puntato (in questo caso i)
    
    int i = 0;
    int* p = &i;
    
    *p = 1;
    
    printf("i = %d, *p = %d\n", i, *p);
    
    Quanto vale i e quanto vale *p? Ovviamente ENTRAMBI 1!

    Ora, diciamo che ti scoccia dover ogni volta deferenziare un puntatore, ma vuoi che lo faccia direttamente il compilatore.
    In questo caso, invece del puntatore, prendi il reference: e' sempre un puntatore, ma che il compilatore AUTOMATICAMENTE dereferenzia:
    
    int i = 0;
    int* p = &i;
    
    *p = 1;
    
    printf("i = %d, *p = %d\n", i, *p);
    
    int& r = i;
    
    r = 2;
    
    printf("i = %d, *p = %d,  &r=%d\n", i, *p, r);
    
    Una proprieta' (a meno di non fare giochi di prestigio) e' che un reference non puo' mai essere nullpr, perche' NON PUOI prendere i reference del puntatore nullo, e non puoi assegnare ad un reference un puntatore nullo.
    (Vabbe, si puo' fare, ma e' giocare sporco )
  • Re: Variabili reference e overload operatori

    In questo caso, invece del puntatore, prendi il reference: e' sempre un puntatore, ma che il compilatore AUTOMATICAMENTE dereferenzia:
    int& r = i;
    Quindi nel caso sopra vuol dire che automaticamente estrae l'indirizzo della variabile i e lo mette in r?
Devi accedere o registrarti per scrivere nel forum
2 risposte