เข้าถึงสมาชิกของวัตถุลูกเมื่ออยู่ในเวกเตอร์พื้นฐาน [ซ้ำกัน]

Jan 20 2021

ตอนนี้ฉันมีปัญหาในการเข้าถึงสมาชิกของวัตถุลูกเมื่ออยู่ในเวกเตอร์พื้นฐานฉันรู้ว่ามันเป็นปัญหาการแบ่งส่วนวัตถุฉันพยายามใช้การหล่อแบบไดนามิก แต่ฉันเป็นมือใหม่และไม่แน่ใจจริงๆเกี่ยวกับไวยากรณ์หรือวิธีใช้ ความช่วยเหลือใด ๆ จะได้รับการชื่นชม pseudocode:

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ตัวชี้วัตถุที่คุณได้รับมา ปัญหาคือคุณจะต้องโฆษณาฟังก์ชันเสมือนเพื่อให้ใช้งานได้