Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    177

    [C++] overload operatore=

    Poniamo di avere questa famiglia di classi

    codice:
    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;
    };
    Se nel codice che impiega quanto sopra faccio

    codice:
    Derivata1 oggetto1;
    //operazioni su oggetto1
    Derivata1 oggetto2;
    
    oggetto2=oggetto1;
    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.

    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

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Non è possibile. Con *oggetto il compilatore non vede un oggetto di classe Derivata, ma un oggetto di classe Base per cui applica lo static binding su tutte le funzioni di Base, che siano virtuali o no.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.