Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में एक्सेप्शन हैंडलिंग बेसिक्स

सी ++ में, अपवाद हैंडलिंग रनटाइम त्रुटियों को संभालने की एक प्रक्रिया है। अपवाद एक घटना है जिसे सी ++ में रनटाइम पर फेंक दिया जाता है। सभी अपवाद std::Exception वर्ग से लिए गए हैं। यह एक रनटाइम त्रुटि है जिसे संभाला जा सकता है। अगर हम अपवाद को हैंडल नहीं करते हैं तो यह अपवाद संदेश को प्रिंट करता है और प्रोग्राम को समाप्त कर देता है।

अपवादों को C++ मानक में <अपवाद> वर्ग के रूप में परिभाषित किया गया है जिसका उपयोग हम अपने कार्यक्रमों के अंदर कर सकते हैं। अभिभावक-बाल वर्ग पदानुक्रम की व्यवस्था नीचे दिखाई गई है:

C++ में एक्सेप्शन हैंडलिंग बेसिक्स

C++ में सामान्य अपवाद वर्ग हैं:

<थ>विवरण
अपवाद
std::अपवाद यह सभी मानक C++ अपवादों का अपवाद और मूल वर्ग है।
std::bad_cast यह डायनेमिक_कास्ट द्वारा दिया गया एक अपवाद है।
std::bad_exception इस अपवाद का उपयोग C++ प्रोग्राम में अप्रत्याशित अपवादों को संभालने के लिए किया जाता है।
std::bad_alloc इसे आम तौर पर नए द्वारा फेंका जाता है।
std::logic_failure कोड पढ़कर इस अपवाद का पता लगाया जा सकता है।
std::runtime_error कोड पढ़कर इस अपवाद का पता नहीं लगाया जा सकता
std::bad_typeid यह टाइपिड द्वारा दिया गया एक अपवाद है।

कीवर्ड:

अपवाद प्रबंधन में 3 कीवर्ड हैं:कोशिश करें, पकड़ें और फेंकें।

कोशिश करें/अवरुद्ध करें:

C++ में, try/catch स्टेटमेंट का उपयोग करके एक्सेप्शन हैंडलिंग की जाती है। कोड जो अपवाद हो सकता है, का उपयोग ट्राई ब्लॉक द्वारा करने के लिए किया जाता है। कैच ब्लॉक का उपयोग अपवाद को संभालने के लिए किया जाता है।

उदाहरण कोड

#include <iostream>
using namespace std;
class Sample1 {
   public:
   Sample1()
   {
      cout << "Construct an Object of sample1" << endl;
   }
   ~Sample1()
   {
      cout << "Destruct an Object of sample1" << endl;
   }
};
class Sample2 {
   public:
   Sample2()
   {
      int i=7;
      cout << "Construct an Object of sample2" << endl;
      throw i;
   }
   ~Sample2()
   {
      cout << "Destruct an Object of sample2" << endl;
   }
};
int main() {
   try {
      Sample1 s1;
      Sample2 s2;
   } catch(int i) {
      cout << "Caught " << i << endl;
   }
}

आउटपुट

Construct an Object of sample1
Construct an Object of sample2
Destruct an Object of sample1
Caught 7

उपयोगकर्ता परिभाषित अपवाद:

हम अपवाद वर्ग कार्यात्मकताओं को इनहेरिट और ओवरराइड करके अपने स्वयं के अपवादों को परिभाषित कर सकते हैं।

उदाहरण कोड

#include <iostream>
#include <exception>
using namespace std;
struct DivideByZero : public exception {
   const char * what () const throw () {
      return "My Exception";
   }
};
int main() {
   try {
      throw DivideByZero();
   } catch(DivideByZero& e) {
      cout << "Exception caught" << endl;
      cout << e.what() << endl;
   } catch(exception& e) {
   }
}

आउटपुट

Exception caught
My Exception
what() = A public method provided by exception class and it has been
overridden by all the child exception classes. It returns the cause of an
exception.

  1. C++ में अपवाद कैसे काम करते हैं?

    सी ++ में, अपवाद हैंडलिंग रनटाइम त्रुटियों को संभालने की एक प्रक्रिया है। अपवाद एक घटना है जिसे सी ++ में रनटाइम पर फेंक दिया जाता है। सभी अपवाद std::Exception वर्ग से लिए गए हैं। यह एक रनटाइम त्रुटि है जिसे संभाला जा सकता है। अगर हम अपवाद को हैंडल नहीं करते हैं तो यह अपवाद संदेश को प्रिंट करता है औ

  1. सी # एक्सेप्शन हैंडलिंग बेस्ट प्रैक्टिसेज

    C# में एक्सेप्शन हैंडलिंग के लिए सर्वोत्तम अभ्यास अपवाद लॉगिंग पर आधारित हैं। लॉग इन अपवादों का रिकॉर्ड रखने के लिए लॉगिंग लाइब्रेरी में होना चाहिए। C# में अपवादों को संभालते समय आपको निम्नलिखित सर्वोत्तम अभ्यासों का पालन करना चाहिए - लॉग4नेट, एनएलओजी, और इसी उद्देश्य के लिए उपयोग किए जाने वाले अन

  1. पायथन में अपवाद हैंडलिंग क्या है?

    एरर एक ऐसी चीज है जो प्रोग्राम में सिंटेक्टिकल एरर की तरह कंपाइल टाइम पर गलत हो जाती है। उदाहरण के लिए। 'abe' = 5 आउटपुट SyntaxError: can't assign to literal यहां तक ​​​​कि अगर कोई कथन या अभिव्यक्ति वाक्य रचनात्मक रूप से सही है, तो इसे निष्पादित करने का प्रयास करने पर त्रुटि हो सकती ह