साथ कास्टिंग आप व्युत्पन्न वर्ग कि BaseA
और BaseB
दोनों से विरासत के लिए एक शून्य * सूचक है, तो कैसे संकलक जानते हुए भी कि void*
सूचक प्रकार Derived
की है बिना BaseA*
(या BaseB*
) को void*
सूचक डाली है?एकाधिक वंशानुक्रम
उत्तर
ऐसा नहीं है। केवल गारंटी जब करने के लिए और एक void*
से कास्टिंग एक static_cast
उपयोग कर रहा है:
प्रकार सूचक का मान परिवर्तित वस्तु के लिए करने के लिए "
cv void
सूचक" और वापस मूल सूचक प्रकार के अपने मूल का मान (सी + +03 §5.2.9/10)।struct B1 { int i; }; struct B2 { int j; }; struct D : B1, B2 { }; D x; B1* b1ptr = &x; void* voidptr = b1ptr; B2* b2ptr = static_cast<B2*>(voidptr);
प्रयास कर रहा है:
उदाहरण के लिए, निम्नलिखित कोड गलत है क्योंकि void*
एक प्रकार मूल सूचक प्रकार के अलावा अन्य करने के लिए डाला जाता है (- ->void*
>B2*
डाली अनुक्रम B1*
है) b2ptr
का उपयोग करने के लिए यहां अपरिभाषित व्यवहार होगा। एकमात्र प्रकार जिसे आप सुरक्षित रूप से voidptr
पर B1*
डाल सकते हैं, क्योंकि वह प्रकार है जिस प्रकार से void*
प्राप्त किया गया था (ठीक है, या char*
, क्योंकि char*
के माध्यम से कुछ भी एक्सेस किया जा सकता है)।
कंपाइलर void*
पॉइंटर को किसी भी चीज़ पर नहीं डाला - आप, प्रोग्रामर, करते हैं।
आदेश में एक void*
सूचक के साथ कुछ भी उपयोगी करने के लिए, आप के लिए स्पष्ट गैर void*
सूचक को यह कलाकारों की जरूरत है, और यदि आप क्या सूचक वास्तव में के लिए अंक टाइप के बारे में गलत कर रहे हैं, आप अपरिभाषित व्यवहार शहर डालें ।
- 1. Metaclass एकाधिक वंशानुक्रम विसंगति
- 2. एकाधिक वंशानुक्रम: 2Classes1Method
- 3. सी ++ एकाधिक वंशानुक्रम हीरा
- 4. C# एकाधिक वंशानुक्रम
- 5. शैलियों एकाधिक वंशानुक्रम
- 6. C++ एकाधिक वंशानुक्रम समारोह
- 7. अजगर एकाधिक वंशानुक्रम
- 8. जावा पर एकाधिक वंशानुक्रम
- 9. एकाधिक वंशानुक्रम + आभासी समारोह गड़बड़
- 10. को खत्म करना एकाधिक वंशानुक्रम
- 11. सी ++ इंटरफेस के साथ एकाधिक वंशानुक्रम?
- 12. सार वर्ग + mixin + अजगर में एकाधिक वंशानुक्रम
- 13. निजी वंशानुक्रम
- 14. एकाधिक वंशानुक्रम आधार वर्ग से अलग व्युत्पन्न वर्ग
- 15. Three.js वंशानुक्रम स्वरूप
- 16. क्या यह काम करता है? सी ++ एकाधिक वंशानुक्रम और निर्माता चेनिंग
- 17. क्यों जावा इंटरफेस से एकाधिक वंशानुक्रम अनुमति नहीं है लेकिन नहीं सार/ठोस वर्ग
- 18. एकाधिक विरासत बुराई है?
- 19. सी शैली Upcast और खिन्न निजी वंशानुक्रम को शामिल
- 20. लिंक एकाधिक एकाधिक जहां प्रश्न
- 21. एकाधिक डीबीकॉन्टेक्स्ट, एकाधिक डेटाबेस .etInitializer
- 22. सिद्धांत एकाधिक एकाधिक एकाधिक कॉल के साथ कई कॉलम
- 23. एकाधिक विरासत का उपयोग करने की अनुशंसा क्यों नहीं की जाती है?
- 24. बड़ी वेबसाइटें - एकाधिक डेटाबेस या एकाधिक टेबल?
- 25. एक्सकोड - एकाधिक लक्ष्य, एकाधिक * अंतर्राष्ट्रीयकृत * नाम?
- 26. एकाधिक भाषाओं के लिए एकाधिक SQLite डेटाबेस?
- 27. एकाधिक फ़ाइलों में एकाधिक तारों की खोज
- 28. एंड्रॉइड, एकाधिक ऐप्स, एकाधिक ग्राहक, एक कीस्टोर
- 29. एकाधिक स्तंभ सूचकांक एकाधिक इंडेक्स बनाम
- 30. आईफोन - एकाधिक लक्ष्य एकाधिक लॉन्च छवियों दुःस्वप्न
आपका उत्तर सही है। मेरे शोध से यदि व्युत्पन्न बेसए और बेसबी को बढ़ाता है, तो वस्तु को मेमोरी में रखा गया है | बेसए | बेसबी | व्युत्पन्न | इस प्रकार सूचक बेसबेस की शुरुआत की ओर इशारा कर रहा है इसलिए बेसबी को व्युत्पन्न कास्टिंग आपको बेसए के सदस्यों को पढ़ेगा। – Chazz