जबकि मैं थोड़ी देर के लिए सी ++ में काम कर रहा हूं, मुझे अब तक पॉलिमॉर्फिक सुविधाओं का उपयोग करने की आवश्यकता नहीं है, और मैं उनके द्वारा बहुत चिंतित हूं।मूल कक्षाओं के लिए मूल बहुलक पॉइंटर्स
अगर मैं एक आधार वर्ग ClassA
है और एक अन्य ClassB
यह से निकला है, मैं समझता हूँ मैं ClassA
में virtual
सदस्य कार्य हो सकता है कि है कि, जब ClassB
में लागू, एक ClassB
उदाहरण भले ही उस कहने पर बताया है में बुलाया जाएगा ClassA
सूचक का उपयोग कर। इस virtual
कीवर्ड के बिना, मुझे लगता है कि बेस क्लास कार्यान्वयन बेस क्लास पॉइंटर का उपयोग करते समय प्रबल होगा, फिर भी उप-वर्ग से तत्काल एक ऑब्जेक्ट पर काम कर रहा है, जो वास्तव में मुझे लगता है कि अगर ClassB
में एक ही फ़ंक्शन का अपना कार्यान्वयन है इस तरह के मामले में प्रभावी रूप से अनदेखा किया जाता है।
क्या यह पॉलिमॉर्फिक व्यवहार की सही समझ है?
अब असली सवाल यह है कि आप बेस क्लास के लिए पॉइंटर का उपयोग करके ClassB
का उपयोग कैसे करते हैं। मैं वास्तव में केवल दो तरीके के बारे में सोच सकते हैं:
- इन्स्टेन्शियशन के समय सूचक बनाएँ, एक समारोह है कि एक आधार वर्ग सूचक रिटर्न जबकि वास्तव में के बजाय उपवर्ग के लिए स्मृति आवंटन, उपवर्ग के निर्माता का उपयोग कर का उपयोग करते हुए। (क्या इस तरह के सृजन फ़ंक्शन का एक सामान्य नाम है?)
static_cast
का उपयोग करके किसी ऑब्जेक्ट को कास्ट करना और बेस क्लास को पॉइंटर को असाइन करना।
क्या ये बेस क्लास पॉइंटर्स को सबक्लास के ऑब्जेक्ट्स बनाने के लिए दो मुख्य तकनीक हैं?
संबंधित: एक अन्य आम तरीका आप कार्रवाई में बहुरूपता देखेंगे एक समारोह कॉल के माध्यम से है वास्तव में http://stackoverflow.com/q/5854581/46821 –