Poniamo di avere questa famiglia di classi
Se nel codice che impiega quanto sopra facciocodice:class Base//classe astratta { public: //metodi pubblici=0 } class Derivata1: public Base { public: //metodi pubblici implementati Derivata1& operator=(const Derivata1& da_copiare) { this->dato1=da_copiare.dato1; this->dato2=da_copiare.dato2; return *this; }; private: tipo1 dato1; tipo2 dato2; }; class Derivata2: public Base { public: //metodi pubblici implementati Derivata2& operator=(const Derivata2& da_copiare) { this->dato3=da_copiare.dato3; this->dato4=da_copiare.dato4; return *this; }; private: tipo3 dato3; tipo4 dato4; };
Tutto fila liscio, oggetto2 è effettivamente uguale a oggetto1 (in altre parole, visualizzo i dati membro dei due oggetti prima e dopo oggetto2=oggetto1, e l'operatore= funziona effettivamente.codice:Derivata1 oggetto1; //operazioni su oggetto1 Derivata1 oggetto2; oggetto2=oggetto1;
Se invece ho la seguente situazione
codice:Base* oggetto1 = new Derivata1; //operazioni su oggetto1 Base* oggetto2 = new Derivata1; *oggetto2=*oggetto1;
L'operazione non va a buon fine. Sbaglio qualcosa o la cosa in effetti non è possibile?
Se non è possibile, allora mi appoggio alla funzione clone (v. anche http://forum.html.it/forum/showthrea...1#post25375912 )
Per ora il mio era un puro esercizio 'accademico', in quanto per la famiglia di classi in cui ho provato a fare quanto sopra, tipo1, tipo2, tipo3 e tipo4 sono tutti double, però in futuro non si sa mai...
Grazie