доступ к члену дочернего объекта, когда он находится в базовом векторе [дубликат]
В настоящее время у меня возникают проблемы с доступом к члену дочернего объекта, когда он находится в базовом векторе, я знаю, что это проблема нарезки объекта, я пытаюсь использовать динамическое приведение, но я новичок и не совсем уверен в синтаксисе или в том, как использовать это, любая помощь будет оценена псевдокодом:
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
Ответы
Jeffrey
Первый способ - полагаться на виртуальные функции:
class Base
{
public:
virtual int doStuff();
}
Class Derived : public base
{
public:
virtual int doStuff();
}
Затем items[0]->doStuff()
вызовет производную версию.
Второй прием - понижать:
dynamic_cast<Derived*>(items[0]);
Это даст вам либо nullptr
указатель на производный объект, либо указатель на него. Проблема в том, что вам нужно добавить виртуальную функцию, чтобы это работало.