Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C++] overloading operator << con classi derivate

    Ciao a tutti, devo fare l'overloading delll'ostream in una classe base e nelle sue derivate... ma ho qualche problema di logica...spero davvero che qualcuna mi possa aiutare:
    (il codice che segue l'ho scritto adesso al volo...tralasciate eventuali errori di sintassi dovuti alla distrazione)

    codice:
    #include <iostream>
    #include <string>
    #include <fstream>
    
    using namespace std;
    
    class Base
    {
          friend ostream& operator <<(ostream& out, const Base& b)
                                   {
                                               out<< "base\n";
                                               return out;
                                   }
          
          public:
                 Base()  {}
                 virtual ~Base(){};
    };
    
    class Derived: public Base
    {
          friend ostream& operator <<(ostream& out, const Derived& d)
                                   {
                                               out<< "derived\n";
                                               return out;
                                   }
          
          public:
                 Derived()  {}
                 virtual ~Derived(){};
    };
    
    int main()
    {
        Base* pointBase;
        
        pointBase = new Base;
        cout << *pointBase;
        
        delete pointBase;
        
        pointBase = new Derived;
        cout << *pointBase;
        
        delete pointBase;
        
        system("PAUSE");
    }
    l'output che ottengo è
    base
    base
    mentre io vorrei ottenere
    base
    derived
    il problema si risolverebbe se io creassi un altra variabile nel main:
    Derived* pointDeriver;
    e utilizzassi quella... ma io ho la necessità di avere un unica variabile che sia puntatore a Base

    spero di essere stato abbastanza chiaro...

    grazie a tutti per l'aiuto


    ciao!

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: [C++] overloading operator << con classi derivate

    Io strutterei il polimorfismo a go go, così:
    codice:
    #include <iostream>
    #include <string>
    #include <fstream>
    
    using namespace std;
    
    class Base
    {
          friend ostream& operator <<(ostream& out, const Base& b)
                                   {
                                               out << b.whoami(); 
                                               return out;
                                   }
          
          public:
                 Base()  {}
                 virtual ~Base(){};
          private:
    
              virtual std::string whoami() const {
                    return std::string("Base");
              }
     
    };
    
    class Derived: public Base
    {
          
          public:
                 Derived()  {}
                 virtual ~Derived(){};
          private:
    
              virtual std::string whoami() const {
                    return std::string("Derived");
              }
     
    };
    
    int main()
    {
        Base* pointBase;
        
        pointBase = new Base;
        cout << *pointBase << endl; 
        
        delete pointBase;
        
        pointBase = new Derived;
        cout << *pointBase << endl; 
        
        delete pointBase;
        
        system("PAUSE");
    }

  3. #3
    grazie davvero shodan.... non ci avevo pensato!!!
    ed era così semplice.... !

    grazie davvero per l'aiuto

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Ricorda solo di non chiamare funzioni polimorfiche nei costruttori o nei distruttori.
    Causano effetti imprevisti.

  5. #5
    ok perfetto...grazie dell'avvertimento... non lo sapevo...
    grazie ancora di tutto!

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.