accedere a un membro di un oggetto figlio quando si trova in un vettore di base [duplicato]
Al momento ho problemi ad accedere a un membro di un oggetto figlio quando si trova in un vettore di base, so che è un problema di affettatura di oggetti, sto cercando di usare il casting dinamico ma sono un principiante e non sono davvero sicuro della sintassi o di come usarlo qualsiasi aiuto sarebbe apprezzato pseudocodice:
class Base {}
Class Derived : public base {
bool A
}
std::vector<Base*> items;
Item* i = new Derived(constructor);
items.push_back(i);
// items[0]->A isnt accessible due to object slicing
Risposte
Jeffrey
La prima tecnica è affidarsi a funzioni virtuali:
class Base
{
public:
virtual int doStuff();
}
Class Derived : public base
{
public:
virtual int doStuff();
}
Quindi, items[0]->doStuff()
chiamerà la versione derivata.
La seconda tecnica è abbattere:
dynamic_cast<Derived*>(items[0]);
Questo ti darà un nullptr
o il tuo puntatore all'oggetto derivato. Il problema è che dovrai aggiungere una funzione virtuale affinché funzioni.