dostęp do elementu członkowskiego obiektu potomnego, gdy znajduje się on w wektorze podstawowym [duplikat]
Obecnie mam problemy z dostępem do elementu członkowskiego obiektu podrzędnego, gdy znajduje się on w wektorze podstawowym, wiem, że jest to problem z krojeniem obiektów, próbuję użyć rzutowania dynamicznego, ale jestem początkującym i nie jestem pewien składni ani sposobu użycia to, każda pomoc byłaby mile widziana pseudokod:
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
Odpowiedzi
Jeffrey
Pierwsza technika polega na wykorzystaniu funkcji wirtualnych:
class Base
{
public:
virtual int doStuff();
}
Class Derived : public base
{
public:
virtual int doStuff();
}
Następnie items[0]->doStuff()
wywoła wersję pochodną.
Druga technika to przygnębienie:
dynamic_cast<Derived*>(items[0]);
W ten sposób otrzymasz nullptr
wskaźnik obiektu pochodnego lub wskaźnik obiektu pochodnego. Problem w tym, że aby to zadziałało, musisz dodać wirtualną funkcję.