किसी बाल वस्तु के सदस्य तक पहुँचना जब यह एक आधार सदिश में है [डुप्लिकेट]

Jan 20 2021

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 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या आपके व्युत्पन्न ऑब्जेक्ट पॉइंटर को दे देगा । समस्या यह है कि, आपको काम करने के लिए एक आभासी फ़ंक्शन का विज्ञापन करना होगा।