acceder a un miembro de un objeto secundario cuando está en un vector base [duplicado]

Jan 20 2021

Actualmente tengo problemas para acceder a un miembro de un objeto secundario cuando está en un vector base, sé que es un problema de corte de objetos, estoy tratando de usar la conversión dinámica pero soy un principiante y no estoy realmente seguro de la sintaxis o cómo usar ello, cualquier ayuda sería 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

Respuestas

Jeffrey Jan 20 2021 at 07:47

La primera técnica es confiar en funciones virtuales:

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

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

Luego, items[0]->doStuff()llamará a la versión derivada.

La segunda técnica es abatir:

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

Esto le dará nullptro su puntero de objeto derivado. El problema es que necesitará agregar una función virtual para que esto funcione.