เข้าถึงสมาชิกของวัตถุลูกเมื่ออยู่ในเวกเตอร์พื้นฐาน [ซ้ำกัน]
ตอนนี้ฉันมีปัญหาในการเข้าถึงสมาชิกของวัตถุลูกเมื่ออยู่ในเวกเตอร์พื้นฐานฉันรู้ว่ามันเป็นปัญหาการแบ่งส่วนวัตถุฉันพยายามใช้การหล่อแบบไดนามิก แต่ฉันเป็นมือใหม่และไม่แน่ใจจริงๆเกี่ยวกับไวยากรณ์หรือวิธีใช้ ความช่วยเหลือใด ๆ จะได้รับการชื่นชม 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
เทคนิคแรกคือการพึ่งพาฟังก์ชันเสมือน:
class Base
{
public:
virtual int doStuff();
}
Class Derived : public base
{
public:
virtual int doStuff();
}
จากนั้นitems[0]->doStuff()
จะเรียกเวอร์ชันที่ได้รับ
เทคนิคที่สองคือการตกต่ำ:
dynamic_cast<Derived*>(items[0]);
สิ่งนี้จะให้nullptr
ตัวชี้วัตถุที่คุณได้รับมา ปัญหาคือคุณจะต้องโฆษณาฟังก์ชันเสมือนเพื่อให้ใช้งานได้