[C++] Problema ereditarietà/late binding

di il
3 risposte

[C++] Problema ereditarietà/late binding

Ciao a tutti. Mi si è presentato un problema con l'ededitarietà in C++
Ho 2 classi:
class Father
{
    std::string nome;
 public:
    ...
    virtual void Print();
};

class Son : public Father
{
    int num;
 public:
    ...
    virtual void Print();
};
La versione di Print utilizzata da Son richiama quella di Father (che stampa il nome) e successivamente stampa il numero.
vector<Father *> v;
v.push_back(new Son("ciao",2));
v[0].Print();
In questo caso mi viene chiamata la versione di Print di Father mentre essendo i metodi virtual dovrebbe essere chiamata quella del tipo effettivo dell'oggetto a run-time (ossia Son)... Non mi capacito di questa cosa... Qualche anima pia può illuminarmi?

Un saluto,
Zeruel

3 Risposte

  • Re: [C++] Problema ereditarietà/late binding

    Guarda che viene chiamato giustamente come hai detto tu il metodo Print() dell'oggetto Son.
    Hai commesso l'errore di aver confuso v[] che restituisce un puntatore in questo caso quindi:
    
    vector<Father *> v;
        v.push_back(new Son("ciao",2));
    	v[0]->Print();
    
    cosi dovrebbe andare bene.
  • Re: [C++] Problema ereditarietà/late binding

    Scusa, è vero. Quello che ho postato è codice "di comodo" scritto al volo giusto per mostrare la situazione... In realtà nel programma uso -> ma chiama comunque il metodo di Father... Non può essere che inserendolo nel vector di perdano queste informazioni (anche se non mi spiego come potrebbe succedere...)? Oppure il mio RTTI è fuso??
  • Re: [C++] Problema ereditarietà/late binding

    Ho riscritto tutto da zero e il problema non si è più ripresentato... Chissà che avevo combinato... Quando avrò più tempo me lo riguarderò con calma.

    Grazie lo stesso!
Devi accedere o registrarti per scrivere nel forum
3 risposte