Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
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;


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
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


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM Quote