किसी बाल वस्तु के सदस्य तक पहुँचना जब यह एक आधार सदिश में है [डुप्लिकेट]
Im स्पष्ट रूप से एक बाल वस्तु के एक सदस्य तक पहुँचने के मुद्दे हैं जब यह एक बेस वेक्टर में है, मुझे पता है कि यह एक वस्तु टुकड़ा करने की क्रिया मुद्दा है, मैं गतिशील कास्टिंग का उपयोग करने की कोशिश कर रहा हूं, लेकिन एक शुरुआत की नकल करता हूं और वास्तव में वाक्य रचना पर या उपयोग करने के लिए निश्चित नहीं हूं यह, किसी भी मदद की सराहना की जाएगी 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
या आपके व्युत्पन्न ऑब्जेक्ट पॉइंटर को दे देगा । समस्या यह है कि, आपको काम करने के लिए एक आभासी फ़ंक्शन का विज्ञापन करना होगा।