Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Overloading di Overloading di operatori
Forum - C/C++ - Overloading di Overloading di operatori

Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 12:36
Venerdė, 08/05/2009
Ok il titolo non rende molto bene l'idea della mia domanda...ma mi piaceva :D
allora, passiamo alle cose serie...ho una classe:

class Int: Object
    {
    private:
        int _n;
    public:
        Int(int);
        Int();
        Int * Get();
        int GetInteger();
        Int * operator=(int);
        Int * operator=(Int *);
        Object * Clone();
    };
    
    Int::Int(int n)
    {
        _n = n;
    }
    Int::Int()
    {
        _n = 0;
    }
    int Int::GetInteger()
    {
        return _n;
    }
    Int * Int::Get()
    {
        return (Int *)Clone();
    }
    Int * Int::operator=(Int *op2)
    {
        _n = op2->GetInteger();
        return this;
    }
    Int * Int::operator=(int op2)
    {
        _n = op2;
        return this;
    }
    Object * Int::Clone()
    {
        Int *copy = new Int();
        copy = this;
        return copy;
    }

la classe object si limita ad esporre Clone come funzione virtuale

Allora il mio problema sono i due operator=
Visual studio 08 non mi segnala nessun errore ma se provo a fare:


Int *n = new Int();
n = 10;
cout<<n->GetInteger();

mi viene segnalato che č impossibile convertire int in Int *, cosa che non dovrebbe succedere visto che c'é l'operator=(int)

sbaglio forse qualcosa?(domanda ovvia e stupida dato che non funziona)

ps: non ho messo i tag code dato che modificavano Int in int e cosė non si capiva niente

Ultima modifica effettuata da lorenzo il 08/05/2009 alle 12:40
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 13:57
Venerdė, 08/05/2009
Beh, e' corretto che ti dia quell'errore ...

n non e' un oggetto di tipo Int ma un "puntatore ad un oggetto" di tipo Int

Quindi devi scrivere

*n = 10;

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 14:09
Venerdė, 08/05/2009
hai perfettamente ragione, non ci avevo pensato....grazie

PM Quote