acessar um membro de um objeto filho quando ele está em um vetor de base [duplicado]

Jan 20 2021

Atualmente estou tendo problemas para acessar um membro de um objeto filho quando ele está em um vetor de base, eu sei que é um problema de divisão de objeto, estou tentando usar a conversão dinâmica, mas sou um iniciante e não tenho certeza sobre a sintaxe ou como usar isso, qualquer ajuda seria apreciada pseudocódigo:

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

Respostas

Jeffrey Jan 20 2021 at 07:47

A primeira técnica é contar com funções virtuais:

class Base 
{
    public:
    virtual int doStuff();
}

Class Derived : public base 
{
    public:
    virtual int doStuff();
}

Em seguida, items[0]->doStuff()chamará a versão derivada.

A segunda técnica é reduzir:

dynamic_cast<Derived*>(items[0]);

Isso lhe dará um nullptrou seu ponteiro de objeto derivado. O problema é que você precisará adicionar uma função virtual para que isso funcione.