06/02/12 17:18
McFly
Salve ragazzi,
sono ancora qui a chiedervi aiuto, probabilmente è una stupidata e spero che riusciate ad aiutarmi!
In pratica ho dei problemi quando implemento un metodo che mi consenta di scambiare il contenuto di due oggetti uguali!
Premetto che i miei oggetti sono dei puntatori a classe e premetto anche che ho implementato il relativo costruttore di copia che funziona(testato)!
Il metodo che sto cercando di implementare è semplice semplice:
Questo metodo così scritto non funziona, infatti se accedo prima e dopo ai rispettivi attributi di questi due oggetti, non è cambiato niente, e i valori non si sono scambiati.
Se però aggiungo al prototipo del mio metodo...una bella & tutto funziona magicamente!
Fatta questa premessa... il mio problema è che io voglio utilizzare questo metodo anche con due oggetti che appartengono ad una classe derivata da B e sfruttare quello che è l'upcasting!
cioè voglio che la mia chiamata si adatti anche a questo...
Il compilatore non mi dice niente(come è giusto che sia poichè l'upcasting avviene implicitamente) quando nel prototipo del mio metodo non aggiungo la &, ma quando l'aggiungo purtroppo mi da un errore nella chiamata
error:invalid inizialization of reference of type B *& from expression of type...
e di seguito anche questo errore...
Sembra quasi che & abbia annullato l'upcasting!
Sapete spiegarmi il perchè?
Esiste una soluzione a questo problema?
Esiste magari una soluzione anche più pulita o questo è quello che deve farsi e magari aggiungere qualche altra cosa???
Grazie mille in anticipO!
sono ancora qui a chiedervi aiuto, probabilmente è una stupidata e spero che riusciate ad aiutarmi!
In pratica ho dei problemi quando implemento un metodo che mi consenta di scambiare il contenuto di due oggetti uguali!
Premetto che i miei oggetti sono dei puntatori a classe e premetto anche che ho implementato il relativo costruttore di copia che funziona(testato)!
Il metodo che sto cercando di implementare è semplice semplice:
void D_class::ScambiaOggetti(B *obj1,B *obj2) { B *temp; temp = obj1; obj1 = obj2; obj2 = temp; }
Questo metodo così scritto non funziona, infatti se accedo prima e dopo ai rispettivi attributi di questi due oggetti, non è cambiato niente, e i valori non si sono scambiati.
Se però aggiungo al prototipo del mio metodo...una bella & tutto funziona magicamente!
void D_class::ScambiaOggetti(B *&obj1,B *&obj2)
Fatta questa premessa... il mio problema è che io voglio utilizzare questo metodo anche con due oggetti che appartengono ad una classe derivata da B e sfruttare quello che è l'upcasting!
class X : public B
cioè voglio che la mia chiamata si adatti anche a questo...
X *obj1,*obj2; ScambiaNodi(obj1,obj2); //
Il compilatore non mi dice niente(come è giusto che sia poichè l'upcasting avviene implicitamente) quando nel prototipo del mio metodo non aggiungo la &, ma quando l'aggiungo purtroppo mi da un errore nella chiamata
error:invalid inizialization of reference of type B *& from expression of type...
e di seguito anche questo errore...
error:in passing argument 1 of void ScambiaOggetti(B *&,B *&)'
Sembra quasi che & abbia annullato l'upcasting!
Sapete spiegarmi il perchè?
Esiste una soluzione a questo problema?
Esiste magari una soluzione anche più pulita o questo è quello che deve farsi e magari aggiungere qualche altra cosa???
Grazie mille in anticipO!
aaa