...
a=b;
आप a
को फिर नियत रहे हैं और इसलिए a
औरb
होगा अब DerivedClass
वस्तु को दोनों बिंदु। BaseClass
ऑब्जेक्ट नष्ट हो जाएगा, क्योंकि इसकी संदर्भ संख्या इस बिंदु पर शून्य होगी (a
के आधार पर एक अलग ऑब्जेक्ट को इंगित करने के लिए पुन: असाइन किया जा रहा है)।
a
के बाद से अब एक DerivedClass
वस्तु, आभासी समारोह कॉल (BaseClass
में परिभाषित किया गया और DerivedClass
में ओवरराइड) के माध्यम से a
DerivedClass
में इसी सदस्य कार्यों कहेंगे को इंगित करता है।
जब a
और b
दोनों दायरे से बाहर निकलते हैं, तो DerivedClass
ऑब्जेक्ट नष्ट हो जाएगा।
आप a
(जैसे, गैर आभासी DerivedClass
में कार्य करता है) के माध्यम से व्युत्पन्न वर्ग के लिए विशिष्ट कार्यों का उपयोग करने की जरूरत है, तो आप उपयोग कर सकते हैं:
boost::dynamic_pointer_cast<DerivedClass>(a)->SomeFunctionOnlyInDerivedClass();
बेशक
यह सिर्फ एक संक्षिप्त उदाहरण है कि उपयोग दिखाता है । उत्पादन कोड में, आप निश्चित रूप से पॉइंटर को संदर्भित करने से पहले DerivedClass
पर एक सफल कलाकार के लिए परीक्षण करेंगे।
स्रोत
2011-02-27 15:29:07
क्या 'static_pointer_cast' भी काम नहीं करेगा और इस प्रकार 'व्युत्पन्न क्लास' में गैर-वर्चुअल फ़ंक्शन को कॉल करने का पसंदीदा तरीका होगा? 'बढ़ावा देने :: static_pointer_cast (क) -> SomeFunctionOnlyInDerivedClass();' –
j00hi