accedere a un membro di un oggetto figlio quando si trova in un vettore di base [duplicato]

Jan 20 2021

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 Jan 20 2021 at 07:47

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 nullptro il tuo puntatore all'oggetto derivato. Il problema è che dovrai aggiungere una funzione virtuale affinché funzioni.