accès à un membre d'un objet enfant lorsqu'il se trouve dans un vecteur de base [dupliquer]

Jan 20 2021

J'ai actuellement des problèmes pour accéder à un membre d'un objet enfant quand il est dans un vecteur de base, je sais que c'est un problème de tranchage d'objet, j'essaie d'utiliser le casting dynamique mais je suis un débutant et je ne suis pas vraiment sûr de la syntaxe ou de la façon de l'utiliser il, toute aide serait pseudocode appréciée:

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

Réponses

Jeffrey Jan 20 2021 at 07:47

La première technique consiste à s'appuyer sur des fonctions virtuelles:

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

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

Ensuite, items[0]->doStuff()appellera la version dérivée.

La deuxième technique consiste à abattre:

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

Cela vous donnera un nullptrou votre pointeur d'objet dérivé. Le problème est que vous devrez ajouter une fonction virtuelle pour que cela fonctionne.