Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Puntatori Classi Astratte
Forum - C/C++ - Puntatori Classi Astratte

Avatar
zEuSsE (Normal User)
Newbie


Messaggi: 3
Iscritto: 03/09/2009

Segnala al moderatore
Postato alle 15:59
Mercoledì, 25/01/2012
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
PM
Avatar
anthony015 (Member)
Pro


Messaggi: 116
Iscritto: 20/05/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 17:30
Mercoledì, 25/01/2012
c'è un errore nella riga:
Codice sorgente - presumibilmente Plain Text

  1. (Derivata *)ptrB->dFunc();


così come è scritto è come se cercassi di castare ptrB->dFunc(), tu, invece vuoi/devi castare ptrB:
Codice sorgente - presumibilmente Plain Text

  1. ((Derivata *)ptrB)->dFunc();


PM