2011-08-30 31 views
15

जो मैंने पढ़ा है, उसके अनुसार एक गलत रन-टाइम गतिशील_कास्ट करने से या तो खराब_कास्ट अपवाद फेंक सकता है या शून्य लौटा सकता है।गतिशील_कास्ट कैसे विफल रहता है?

क्या यह कहना सही है कि यदि आप पॉइंटर्स कास्टिंग कर रहे हैं तो यह शून्य वापस आ जाएगा?

यानी:

class Base { virtual void a(){} }; 
class Derived: public Base {}; 

int main() { 
    Base *base = new Base(); 
    dynamic_cast<Derived*>(base); 
    return 0; 
} 

और वह जब वस्तुओं कास्टिंग यह एक bad_cast अपवाद फेंक होगा?

यानी:

class Base { virtual void a(){} }; 
class Derived: public Base {}; 

int main() { 
    Base base; 
    Base& ref = base; 
    dynamic_cast<Derived&>(ref); 
    return 0; 
} 

उत्तर

26

dynamic_cast एक बुरा डाली आप एक सूचक कास्टिंग कर रहे हैं पर शून्य प्राप्त होगा; संदर्भ कास्टिंग करते समय यह std::bad_cast फेंक देगा। यह ऑब्जेक्टdynamic_cast (उदाहरण के साथ, dynamic_cast<Derived>(base) के साथ)

+0

ठीक है, तो पुष्टि सही है। धन्यवाद। मैंने बेस क्लास पॉलिमॉर्फिक (वर्चुअल फ़ंक्शन जोड़ना) बनाने और अपवाद के लिए संदर्भ कास्टिंग का उपयोग करने के लिए संदेश संपादित किया। – NIGO

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