dostęp do elementu członkowskiego obiektu potomnego, gdy znajduje się on w wektorze podstawowym [duplikat]

Jan 20 2021

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

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 nullptrwskaźnik obiektu pochodnego lub wskaźnik obiektu pochodnego. Problem w tym, że aby to zadziałało, musisz dodać wirtualną funkcję.