दिलचस्प पोस्ट
Xpath में php के साथ फिल्टर विशेषताओं के लिए regex का उपयोग करना ओरेकल में बूलियन फील्ड फ़्रेम के लिए अजगर टंकिनर स्क्रॉलबार एक्सेल वर्कबुक खोलने के लिए वाइल्डकार्ड का उपयोग करना क्या किसी विशिष्ट मूल्य के लिए अल्पविराम से अलग कॉलम क्वेरी करना संभव है? एक अधिसूचना से मापदंडों को एक गतिविधि में कैसे भेजें? Xcode 6 iPhone सिम्युलेटर आवेदन समर्थन स्थान ऑफसेटिंग कॉलम काम नहीं कर रहा है (बूटस्ट्रैप v4.0.0-बीटा) छवि को आधार64 में परिवर्तित करना जीआईटी में एक ही शाखा को क्लोन कैसे करें? पर क्यों () दो बार कहा जाता है? क्या कोई ऐसा तरीका है जो जावा में एक तथ्यात्मक गणना करता है? जावा में वस्तुओं की एक सरणी बनाना जावास्क्रिप्ट के साथ एक सीएसएस मूल्य प्राप्त करें VirtualHost को जोड़ना विफल रहता है: प्रवेश निषिद्ध त्रुटि 403 (एक्सएम्पीपी) (विंडोज 7)

C ++ में 'static_cast' का उपयोग करके डाउनकास्टिंग

विचार करें:

class base { base(); virtual void func(); } class derived : public base { derived(); void func(); void func_d(); int a; } main { base *b = new base(); sizeof(*b); // Gives 4. derived * d = static_cast<derived*>(b); sizeof(*d); // Gives 8- means whole derived obj size..why? d->func_d(); } 

उपरोक्त कोड में मैंने एक बेस पॉइंटर के डाउनकास्टिंग किया जो कि आधार वस्तु को व्युत्पन्न क्लास पॉइंटर को इंगित करता है। मैं सोच रहा हूं कि कैसे व्युत्पन्न सूचक पूरी व्युत्पन्न वर्ग ऑब्जेक्ट है। मैं व्युत्पन्न क्लास फ़ंक्शन (केवल व्युत्पन्न वर्ग में घोषित) कॉल कर सकता हूं। मुझे अवधारणा यहाँ नहीं मिली।

वेब के समाधान से एकत्रित समाधान "C ++ में 'static_cast' का उपयोग करके डाउनकास्टिंग"

ऑब्जेक्ट को एक प्रकार के डालने के लिए static_cast का उपयोग करना, यह वास्तव में उपज नहीं है, अपरिभाषित व्यवहार यूबी के लक्षण व्यापक रूप से भिन्न होते हैं ऐसा कुछ भी नहीं है जो कहता है कि यूबी व्युत्पन्न सदस्य कार्य को सफलतापूर्वक बुलाया नहीं जा सकता है (लेकिन ऐसा कुछ भी नहीं है जो गारंटी देगा कि ऐसा होगा, इसलिए इस पर भरोसा न करें)।

यहां [expr.static.cast] का उपयोग करने वाले डाउनकास्टिंग के नियम, सी ++ मानक (सी ++ 0x [expr.static.cast] ) के खंड 5.2.9 ( [expr.static.cast] ) में पाया गया है:

"पॉइंटर टू सीवी 1 B " का एक प्राइव , जहां B एक क्लास प्रकार होता है, को "पॉइंटर टू सीवी 2 D " के एक प्राइव्यू में परिवर्तित किया जा सकता है, जहां D B से प्राप्त एक क्लास है, अगर "पॉइंटर" से एक वैध मानक रूपांतरण D "से" B टू पॉइंटर B "में मौजूद है, सीवी 2 एक ही सीवी-योग्यता है, या सीवी 1 की तुलना में अधिक सीवी-योग्यता है, और B न तो वर्चुअल बेस क्लास है और न ही वर्चुअल बेस क्लास का आधार वर्ग । शून्य सूचक मूल्य गंतव्य प्रकार के शून्य सूचक मूल्य में कनवर्ट किया जाता है। यदि टाइप "पॉइंटर टू सीवी 1 B " का प्राइव्यू B को इंगित करता है जो कि वास्तव में प्रकार D ऑब्जेक्ट का एक सबोबैक्ट होता है, जिसके परिणामस्वरूप पॉइंटर अंक D के संलग्न ऑब्जेक्ट को इंगित करता है। अन्यथा, कलाकारों के परिणाम अनिर्धारित हैं।

रनटाइम चेकिंग करने वाला एकमात्र कलाकार dynamic_cast<>() । यदि कोई संभावना है कि एक कलाकार रनटाइम पर काम नहीं करेगा तो इस कास्ट का इस्तेमाल किया जाना चाहिए।

इस प्रकार पत्ती से कास्टिंग-> रूट (ऊपर कास्टिंग) static_cast<>() ठीक काम करता है
लेकिन रूट-> पत्ती (कास्टिंग का नीचे) से कास्टिंग खतरनाक है और (मेरी राय में) dynamic_cast<>() साथ हमेशा किया जाना चाहिए क्योंकि रन-टाइम जानकारी पर निर्भरताएं होंगी। लागत मामूली है, लेकिन हमेशा सुरक्षा के लिए भुगतान करने के लायक है

sizeof संकलन-समय पर मौजूद है यह न तो जानता है और न ही परवाह करता है कि रन-टाइम में, आपका बेस ऑब्जेक्ट किसी derived व्यक्ति से बात नहीं करता derived । आप एक रन-टाइम वेरिएबल के साथ संकलन-समय व्यवहार को प्रभावित करने का प्रयास कर रहे हैं, जो मौलिक रूप से असंभव है