Zugriff auf ein Mitglied eines untergeordneten Objekts, wenn es sich in einem Basisvektor befindet [Duplikat]
Ich habe derzeit Probleme beim Zugriff auf ein Mitglied eines untergeordneten Objekts, wenn es sich in einem Basisvektor befindet. Ich weiß, dass es sich um ein Objekt-Slicing-Problem handelt. Ich versuche, dynamisches Casting zu verwenden, bin aber ein Anfänger und bin mir hinsichtlich der Syntax oder der Verwendung nicht sicher es wäre jede Hilfe Pseudocode dankbar:
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
Antworten
Die erste Technik besteht darin, sich auf virtuelle Funktionen zu verlassen:
class Base
{
public:
virtual int doStuff();
}
Class Derived : public base
{
public:
virtual int doStuff();
}
Dann items[0]->doStuff()
wird die abgeleitete Version aufgerufen.
Die zweite Technik ist das Niederwerfen:
dynamic_cast<Derived*>(items[0]);
Dadurch erhalten Sie entweder einen nullptr
oder Ihren abgeleiteten Objektzeiger. Das Problem ist, dass Sie eine virtuelle Funktion hinzufügen müssen, damit dies funktioniert.