Ciao a tutti, ho un problema con l'uso dei puntatori a classi astratte.
provo a schematizzare il codice del problema:
class Base {
virtual void dFunc() {}
};
class Derivata: public Base{
dFunc() {}
};
-----
Base *ptrB;
void foo1(){
ptrB=(Derivata *) new Derivata;
ptrB->dFunc();
}
void foo2(){
(Derivata *)ptrB->dFunc();
}
int main(){
foo1();
foo2();
}
Non so se il codice č chiaro, comunque la situazione č quella in cui io ho una classe astratta (Base) e una normale che implementa i metodi virtuali della prima (Derivata). Nel mio programma ho un puntatore globale alla classe Base, che inizializzo con l'indirizzo di un oggetto della classe Derivata all'interno della funzione foo1. All'interno di questa funzione con il puntatore riesco a richiamare i metodi della classe Derivata. Se invece mi sposto nella funzione foo2, anche se il puntatore punta sempre allo stesso indirizzo di memoria, il compilatore mi dice che č stata richiamata una funzione astratta, come se ptrB stesse puntando alla classe astratta anzichč a quella derivata. Avete idee di cosa sbaglio?
Ultima modifica effettuata da zEuSsE il 25/01/2012 alle 16:00 |