Quello che ho trovato cercando sia nel forum che in internet non mi ha risolto i problemi, quindi mi permetto di aprire un nuova discussione.
Il problema è che mi serve dichiarare all'inizio un puntatore alla classe base, e successivamente, farlo puntatore (new...) ad una classe derivata.
E questo è a posto.
L'overriding delle funzioni dovrebbe essere a posto.
Che crea problemi è se nella classe derivata implemento unafunzione che non c'è nella classe base, e tutto si pianta.
Ho trovato in giro di mettere using ClasBase::xxxx, ma non risolve il problema, o ho sbagliato a usarlo.
Ecco il codice che riproduce il problema
classi.h
classi.cppcodice:#ifndef CLASSI_H #define CLASSI_H class ClasBase { public: ClasBase(); virtual ~ClasBase(); virtual void pippo(); }; class ClasDerivata:public ClasBase { public: ClasDerivata(); ~ClasDerivata(); void pippo(); void pippo2(); }; #endif // CLASSI_H
main.cppcodice:#include "classi.h" #include <iostream> using namespace std; ClasBase::ClasBase() { cout<<"\n"<<__func__; } ClasBase::~ClasBase() { cout<<"\n"<<__func__; } void ClasBase::pippo() { cout<<"\nClasBase::"<<__func__; } ClasDerivata::ClasDerivata():ClasBase() { cout<<"\n"<<__func__; } void ClasDerivata::pippo() { cout<<"\nClasDerivata::"<<__func__; } void ClasDerivata::pippo2() { cout<<"\nClasDerivata::"<<__func__; } ClasDerivata::~ClasDerivata() { cout<<"\n"<<__func__; }
Perchè non riesco a far funzionare la funzione "pippo2"?codice:#include <iostream> #include <stdlib.h> #include "classi.h" using namespace std; int main() { cout << "Hello world!" << endl; ClasBase base; system("pause"); ClasBase* classe; classe=new ClasBase; classe->pippo(); delete(classe); classe=new ClasDerivata; system("pause"); classe->pippo(); classe->ClasBase::pippo(); classe->pippo2();//mettendo il commento a questa riga il programma fila liscio delete(classe);//richiama correttamente i due distruttori. Se però metto il commento a questa riga, alla fine del programma vedo richiamato solo il distruttore di ClasBase, corretto? system("pause"); return 0; }
L'errore del compilatore è il seguente
||=== Build: Debug in Classi derivate (compiler: GNU GCC Compiler) ===|
C:\C++\Classi derivate\main.cpp||In function 'int main()':|
C:\C++\Classi derivate\main.cpp|21|error: 'class ClasBase' has no member named 'pippo2'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

Rispondi quotando
