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

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

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

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

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

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

<टेबल> <थहेड> क्रमांक <वें शैली ="पाठ-संरेखण:केंद्र;">अपवाद और विवरण 1 std::अपवाद
यह सभी मानक C++ अपवादों का अपवाद और मूल वर्ग है।
2 std::bad_cast
यह डायनामिक_कास्ट द्वारा फेंका गया अपवाद है।
3 std::bad_exception
इस अपवाद का उपयोग C++ प्रोग्राम में अनपेक्षित अपवादों को संभालने के लिए किया जाता है।
4 std::bad_alloc
यह आम तौर पर नए द्वारा फेंका जाता है।
5 std::logic_failure
एक कोड को पढ़कर इस अपवाद का पता लगाया जा सकता है।
6 std::runtime_error
किसी कोड को पढ़कर इस अपवाद का पता नहीं लगाया जा सकता है।
7 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. सी ++ में ओपनसीवी का उपयोग कर माउस इवेंट्स के साथ कैसे काम करें?

    माउस इवेंट ओपनसीवी की सबसे उपयोगी विशेषताओं में से एक है। ओपनसीवी में, हम माउस पॉइंटर की स्थिति को ट्रैक कर सकते हैं और क्लिक (दाएं, बाएं और मध्य-क्लिक) को ट्रैक कर सकते हैं। OpenCV का रोबोटिक्स और कंप्यूटर विज़न में व्यापक अनुप्रयोग है। रोबोटिक्स और कंप्यूटर विज़न ट्रैकिंग में माउस पॉइंटर और क्लिक

  1. C++/C++17 में इनलाइन वैरिएबल कैसे काम करते हैं?

    C++ में, हम फ़ंक्शन के लिए इनलाइन कीवर्ड का उपयोग कर सकते हैं। C++ 17 वर्जन में इनलाइन वेरिएबल कॉन्सेप्ट आ गया है। इनलाइन चर को कई अनुवाद इकाइयों में परिभाषित करने की अनुमति है। यह एक परिभाषा नियम का भी पालन करता है। यदि इसे एक से अधिक बार परिभाषित किया जाता है, तो संकलक अंतिम कार्यक्रम में उन सभी

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

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