bir temel vektörde olduğunda bir alt nesnenin üyesine erişim [duplicate]

Jan 20 2021

Bir temel vektördeyken bir alt nesnenin bir üyesine erişmede sorun yaşıyorum, bunun bir nesne dilimleme sorunu olduğunu biliyorum, dinamik döküm kullanmaya çalışıyorum ama yeni başlayan biriyim ve sözdiziminden veya nasıl kullanılacağından gerçekten emin değilim herhangi bir yardım sözde kod olarak takdir edilecektir:

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

Yanıtlar

Jeffrey Jan 20 2021 at 07:47

İlk teknik, sanal işlevlere güvenmektir:

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

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

Ardından, items[0]->doStuff()türetilmiş sürümü çağıracaktır.

İkinci teknik, aşağı inmek:

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

Bu size ya bir nullptrya da Türetilmiş nesne işaretçinizi verecektir . Sorun şu ki, bunun çalışması için sanal bir işlev eklemeniz gerekecek.