기본 벡터에있을 때 자식 개체의 멤버에 액세스 [중복]
현재 기본 벡터에있을 때 자식 개체의 구성원에 액세스하는 데 문제가 있습니다. 개체 슬라이싱 문제라는 것을 알고 있습니다. 동적 캐스팅을 사용하려고하지만 초보자이며 구문이나 사용 방법에 대해 잘 모르겠습니다. 그것은 어떤 도움을 주시면 감사하겠습니다.
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
또는 파생 개체 포인터를 제공합니다. 문제는 이것이 작동하려면 가상 기능을 광고해야한다는 것입니다.