C++ Exception Handling

Introduction to C++ Exception Handling

जब आप program बनाते है तो errors आना स्वाभाविक है। सभी programming languages में ये errors दो प्रकार की होती है।

  1. Logical errors - ये वे errors होती है जब program completely run होने के बाद भी desired output नहीं produce करता है।
  2. Syntactical errors - ये वे errors होती है जो program में गलत syntax लिखने से आती है। जैसे की आप गलती से यदि semicolon लगाना भूल जाएँ आदि।

Syntactical errors program के run होने से पहले ही detect हो जाती है। जब तक आप syntactical errors को correct नहीं करते है तब तक program run नहीं होता है। दूसरी और logical errors program में logic correct करने पर ठीक होती है। ध्यान देने योग्य बात ये है की ये दोनों ही तरह की errors run time पर नहीं आती है और program के execution को नहीं रोकती है।

इन दोनों errors के अलावा एक तीसरे तरीके की error भी होती है जो run time पर आती है और program के execution को रोक देती है। इस तरह की error को exception कहते है।

Exception ऐसी conditions होती है जिनका program से कोई connection नहीं होता है। Exceptions user की गलती से या system की limitation से आती है। जैसे की यदि array में केवल 10 values डाली जा सकती है और आप loop के द्वारा 11 values डालने का प्रयास कर रहे है। ऐसी situation में program एक exception generate करेगा।

जब आप छोटे छोटे program बनाते है तो exceptions पर इतना ध्यान नहीं देते है क्योंकि उसका किसी पर कोई effect नहीं होता है। लेकिन जब आप real world software develop करते है तो ऐसी exceptions को handle करना अनिवार्य हो जाता है।

Exceptions को handle करने के लिए C++ आपको exception handling mechanism provide करती है। इस mechanism के द्वारा आप कोई भी exception आने पर उसे handle कर सकते है और program के directly terminate होने के बजाय कोई दूसरा code execute करके program को terminate कर सकते है। उदाहरण के लिए आप program के terminate होने से पहले एक message show कर सकते है।

C++ Exception Handling Keywords

Exceptions को handle करने के लिए C++ आपको कुछ built in keywords provide करती है। इन keywords के माध्यम से आप exceptions को आसानी से detect और handle कर सकते है।

try

ये एक block होता है। इसमें आप program के उस code को लिखते है जिससे exception generate होने की सम्भावना है। उदाहरण के लिए आपके program में कोई calculation का या कोई दूसरा logical code है जिससे आपको लगता है की exception generate हो सकती है तो ऐसे code को आप try block के अंदर लिखते है।

try
{
   //Code that may generate exception
}

throw

ये keyword try block में यूज़ किया जाता है। इस keyword के द्वारा try block से exception को throw किया जाता है। ये exception catch block को throw की जाती है जो की exception को handle करता है। इस block के द्वारा आप किसी particular variable को catch block को pass भी कर सकते है। जिसे catch block exception को handle करने के लिए यूज़ कर सकता है।

catch

ये वो block होता है जँहा पर आप exception को handle कर सकते है। इस block के द्वारा आप exception आने पर कोई message भी show कर सकते है या फिर कोई दूसरा code भी execute करवा सकते है।

ये block हमेशा try block के just बाद में आता है। एक से ज्यादा exceptions को handle करने के लिए आप एक से अधिक catch block भी create कर सकते है।

catch(exception-argument)
{
       //Handle exception here
}

Exception Handling Process

C++ में exception को handle करते समय आप एक process से गुजरते है। नीचे इस process को कुछ steps के द्वारा समझाया जा रहा है।

  1. सबसे पहले exception detect की जाती है।
  2. इसके बाद throw keyword के द्वारा exception throw की जाती है।
  3. इसके बाद catch block द्वारा exception catch की जाती है।
  4. इसके बाद आप catch block में exception को handle करते है।

Example

आइये अब C++ में exception handling को एक उदाहरण के माध्यम से समझने का प्रयास करते है।

#include <iostream>
using namespace std;

int main()
{
    int num=5;
    int result;  

   try
   {
        result = num/0;
        throw 0;
   }
   catch(int e)
   {
        cout<<"Divide by"<<e<<"exception occurred!!";
   }

    return 0;
}

ऊपर दिए गए उदाहरण में जब 5 को zero से divide किया जाता है तो exception generate होती है। फिर इस exception को catch block में handle किया गया है। ये program निचे दिया गया output generate करता है।

Divide by 0 exception occurred!!

C++ Built in Exceptions

C++ आपको कुछ built in exceptions provide करती है जिन्हें आप throw और catch कर सकते है। ये exceptions C++ में classes के माध्यम से represent की गयी है। सभी exception classes की base class exception होती है। Exception class को directly 9 classes inherit करती है। इनकी list निचे दी जा रही है।

  1. bad_alloc
  2. bad_cast
  3. bad_exception
  4. bad_function_call
  5. bad_typeid
  6. bad_weak_ptr
  7. ios_base::failure
  8. logic_error
  9. runtime_error

इनमें से logic_error class को 5 classes inherit करती है।

  1. domain_error
  2. future_error
  3. invalid_argument
  4. length_error
  5. out_of_range

runtime_error class को भी 4 classes inherit करती है।

  1. overflow_error
  2. range_error
  3. system_error
  4. underflow_error