2016-08-09 12 views
6

के साथ उलझन में मैं सी ++ के लिए नया हूं, इसलिए बहुत मूर्ख सवाल पूछने के लिए खेद है, लेकिन मैं सी ++ के अपवाद हैंडलिंग तंत्र में फेंक बयान के साथ उलझन में हूं।सी ++ अपवाद फेंक स्टेटमेंट

  • नीचे दिए गए कोड में हम कक्षा नाम से मेल खाने वाले नाम के साथ फ़ंक्शन क्यों कॉल करते हैं?
  • क्या यह एक निर्माता है?
  • क्या यह class Except का उदाहरण बना रहा है?

मैं वहाँ वाक्य रचना समझ नहीं कर रहा हूँ।

class A 
{ 
public: 
    class Except{}; 
    void foo() { throw Except(); } 
}; 

int main() 
{ 
    A a; 
    try 
    { 
    a.foo();  
    } 
    catch(Except E)//exception handler 
    { 
    cout << "Catched exception" << endl;  
    } 
} 
+1

हां यह डिफ़ॉल्ट कन्स्ट्रक्टर का उपयोग करके 'एक्सेप्ट' का एक उदाहरण बना रहा है, जिसमें कोई तर्क नहीं होता है। – CoryKramer

+7

जैसा कि आप सीख रहे हैं; कॉन्स्ट रेफरेंस द्वारा पकड़ अपवाद जैसे 'पकड़ (कॉन्स एक्सेप्ट एंड ई) ' –

उत्तर

5

यह एक निर्माता है?

हां।

क्या यह कक्षा को छोड़कर एक उदाहरण बना रहा है?

हां फिर से। ये दोनों कथन सत्य हैं।

classname(arguments) 

कहाँ classname एक वर्ग का एक नाम है इस वर्ग का एक उदाहरण का निर्माण, उचित वर्ग निर्माता के लिए किसी भी वैकल्पिक arguments गुजर।

और, निश्चित रूप से, निर्माता वर्ग विधियां हैं जिनके नाम कक्षा के नाम के समान हैं। यही कारण है कि आपके दोनों प्रश्नों का एक ही जवाब है, "हां"।

यह कक्षा का एक अस्थायी उदाहरण बनाता है। आम तौर पर classname का उपयोग इस वर्ग के उदाहरण का प्रतिनिधित्व करने वाले चर को घोषित करने के लिए किया जाता है, लेकिन यह वाक्यविन्यास कक्षा का एक अस्थायी उदाहरण बनाता है, जो अभिव्यक्ति (आमतौर पर) के अंत में नष्ट हो जाता है। यदि आवश्यक है कि कक्षा के किसी अन्य समारोह में एक उदाहरण को पास करना है, तो एक अलग चर की आवश्यकता नहीं है (इस श्रेणी में एक अपवाद फेंकना भी) होगा।

+0

ठीक है ... पुष्टि के लिए धन्यवाद। – user2746926

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