Ho una classe derivata da un'altra, utilizzo una matrice di puntatori di classe base per contenere istanze della classe derivata, ma poiché l'array è della classe base, I non posso accedere ai membri appartenenti alla classe derivata con notazione del puntatore, è possibile per me accedere a questi membri con un semplice comando o dovrei semplicemente riscrivere la mia classe base per definire il membro e usarla solo nella classe derivata?Membro di accesso della classe derivata dal puntatore della classe base
Esempio:
class A {
public:
int foo;
};
class B : public A {
public:
char bar;
};
class C : public A {
int tea;
};
int main() {
A * arr[5];
arr[0] = new B;
char test = arr[0]->bar; //visual studio highlights this with an error "class A has no member bar"
return 0;
}
Per quanto ne so non è possibile accedere al membro di una classe derivata dal puntatore di una classe base. Semplicemente perché la classe base non lo riconosce in alcun modo. Puoi comunque accedere al membro della classe base dal puntatore di una classe derivata perché la gerarchia dice ** i membri pubblici della classe base ora sono anche membri della classe derivata **. –
Ma i dati tecnicamente esistono giusto? Posso usare l'offset di memoria per farlo? – Stephen
Ecco a cosa servono i metodi virtuali. Se non hai ancora imparato a conoscere i metodi virtuali nella tua classe C++, ora è un'eccellente opportunità per farlo. –