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á nullptr
o su puntero de objeto derivado. El problema es que necesitará agregar una función virtual para que esto funcione.