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
codice:
#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
classi.cpp
codice:
#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__;
}
main.cpp
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;
}
Perchè non riesco a far funzionare la funzione "pippo2"?
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)) ===|