2012-02-13 19 views
6

से ऑब्जेक्ट कास्ट करें यदि मैंने किसी ऑब्जेक्ट को बेस टाइप पर डाला है और उसे std :: मैप में संग्रहीत किया है, और फिर इसे वापस प्राप्त करें और इसे व्युत्पन्न प्रकार पर पुन: प्राप्त करें, क्या मेरे पास अभी भी सही है व्युत्पन्न वर्ग के सदस्यों में डेटा?कास्ट ऑब्जेक्ट बेस से और

क्या मुझे एक विशिष्ट प्रकार का कास्ट बनाने की ज़रूरत है?

+0

sepp2k का उत्तर डेटा को कैसे बनाए रखने के लिए कवर करता है। 'Static_cast' और 'dynamic_cast' के साथ-साथ सामान्य सी शैली कास्टिंग उपलब्ध है। – Firedragon

+2

यह भी ध्यान रखें कि डाउनकास्टिंग "अक्सर" कोड गंध है। –

उत्तर

12

यदि आप ऑब्जेक्ट पर पॉइंटर्स कास्टिंग कर रहे हैं, तो यह कोई समस्या नहीं है क्योंकि पॉइंटर्स अभी भी एक ही ऑब्जेक्ट को इंगित करेंगे।

यदि आप वास्तविक वस्तु कास्टिंग कर रहे हैं, तो उपclass से सभी जानकारी खो जाएंगी जब यह सुपरक्लास में परिवर्तित हो जाए, तो इसे वापस कास्ट करना उस जानकारी को पुनर्स्थापित नहीं करेगा।

+0

वास्तविक वस्तु कास्टिंग? कैसे? 'Static_cast' का प्रयोग करें? – Alcott

+0

@ एल्कोट हां, या सी-शैली प्रतिलिपि बनाता है या कॉपी कन्स्ट्रक्टर या असाइनमेंट ऑपरेटर का उपयोग करता है, यानी 'सुपर क्लास ओबीजे (सबक्लास());' या 'obj = subClass();' (हालांकि तकनीकी रूप से जो कि कास्ट के रूप में नहीं गिना जा सकता है)। – sepp2k

संबंधित मुद्दे