기본 벡터에있을 때 자식 개체의 멤버에 액세스 [중복]

Jan 20 2021

현재 기본 벡터에있을 때 자식 개체의 구성원에 액세스하는 데 문제가 있습니다. 개체 슬라이싱 문제라는 것을 알고 있습니다. 동적 캐스팅을 사용하려고하지만 초보자이며 구문이나 사용 방법에 대해 잘 모르겠습니다. 그것은 어떤 도움을 주시면 감사하겠습니다.

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

첫 번째 기술은 가상 기능에 의존하는 것입니다.

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

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

그런 다음 items[0]->doStuff()파생 된 버전을 호출합니다.

두 번째 기술은 다운 캐스트하는 것입니다.

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

이것은 nullptr또는 파생 개체 포인터를 제공합니다. 문제는 이것이 작동하려면 가상 기능을 광고해야한다는 것입니다.