आपरेशन डालने के बाद बच्चे में आभासी समारोह का उपयोग करना मैं निम्नलिखित कोड है:C++
class A
{
};
class B : public A
{
public:
virtual void f() {}
};
int main()
{
A* a = new A();
B* b = static_cast<B*>(a);
b->f();
}
इस कार्यक्रम के एक विभाजन गलती के साथ विफल रहता है। इस कार्यक्रम काम करने के लिए दो समाधान हैं:
- घोषित च गैर आभासी
- कॉल नहीं करते बी> च() (यानी यह कलाकारों की वजह से नहीं विफल रहता है)
हालांकि , दोनों एक विकल्प नहीं हैं। मुझे लगता है कि यह vtable में एक लुकअप के कारण काम नहीं करता है।
(वास्तविक कार्यक्रम में, एक भी आभासी कार्यों है। इसके अलावा, आभासी समारोह निर्माता में नहीं बुलाया जाता है।)
वहाँ इस कार्यक्रम काम करने के लिए कोई तरीका है?
+1 एक अच्छी तरह से स्वरूपित 1 प्रश्न के लिए। –
इस मामले में, आप गतिशील_कास्ट पसंद कर सकते हैं, जो ए * ए = नया ए() के साथ "असफल" (वापसी शून्य) होगा, लेकिन ए * ए = नया बी() के साथ सफल होगा। आपको यह जांचना होगा कि बी बी कॉल करने से पहले शून्य नहीं है -> f()। – jmanning2k