8.9 C
New York
Monday, November 25, 2024

Exception Dealing with in C++ | What’s Exception Dealing with in C++


Exception dealing with in C++ is a specific situation for builders to deal with. In programming, committing errors that immediate uncommon situations referred to as errors is regular. All in all, these errors are of three varieties:

  1. Syntax Error
  2. Logical Error 
  3. Runtime Error

What’s Exception Dealing with in C++? 

Exception dealing with in C++ is a mechanism that permits a program to take care of runtime errors and distinctive conditions in a structured and managed method. In C++, exceptions are used to deal with errors that happen throughout the execution of a program, corresponding to division by zero, accessing invalid reminiscence, or file I/O errors.

The fundamental concept behind exception dealing with is to separate the traditional circulate of program execution from error-handling code. As a substitute of terminating this system abruptly when an error happens, C++ offers a method to “throw” an exception, representing the error or distinctive situation. The thrown exception is then caught by applicable “catch” blocks, the place this system can deal with the error gracefully.

Right here’s a primary define of how exception dealing with works in C++:

  1. Throwing an Exception:
    When a important error happens throughout program execution, you should utilize the throw assertion to lift an exception. It often takes an object as an argument, which serves because the illustration of the error.
#embody <iostream>

void someFunction(int worth) {
    if (worth == 0)
        throw std::runtime_error("Error: Division by zero!");
    // ... different code ...
}
  1. Catching an Exception:
    To catch an exception, you utilize a attempt block. The code that may increase an exception is positioned contained in the attempt block. If an exception is thrown inside the attempt block, this system will instantly leap to the corresponding catch block.
int most important() {
    attempt {
        int x = 10;
        int y = 0;
        someFunction(x / y);
    } catch (const std::runtime_error& e) {
        std::cout << "Exception caught: " << e.what() << std::endl;
    }
    // ... different code ...
    return 0;
}
  1. Dealing with the Exception:
    The catch block handles the caught exception. It specifies the kind of exception it may catch in parentheses, adopted by a block of code that handles the distinctive situation.
  2. A number of Catch Blocks:
    You may have a number of catch blocks to deal with several types of exceptions. The primary catch block that matches the thrown exception’s sort will probably be executed, and the others will probably be skipped.
attempt {
    // code that will throw exceptions
} catch (const SomeExceptionType& e) {
    // deal with SomeExceptionType
} catch (const AnotherExceptionType& e) {
    // deal with AnotherExceptionType
} catch (...) {
    // deal with some other exception that's not caught by earlier catch blocks
}
  1. Exception Security:
    Exception security refers back to the idea of guaranteeing {that a} program’s state stays constant even when an exception is thrown. Writing exception-safe code is important to forestall useful resource leaks and preserve knowledge integrity.

By utilizing exception dealing with, you may make your C++ applications extra sturdy and maintainable, as they supply a method to deal with errors in a managed method, moderately than having this system terminate abruptly on encountering a difficulty.

When no exception situation occurs, the code will execute ordinarily. The handlers will probably be disregarded.

A easy instance to grasp Distinctive dealing with in C++

#embody <iostream>

int most important() {
    attempt {
        // Code that will throw an exception
        int numerator = 10;
        int denominator = 0;
        int consequence = numerator / denominator;

        std::cout << "End result: " << consequence << std::endl;
    }
    catch (const std::exception& e) {
        std::cout << "Exception occurred: " << e.what() << std::endl;
    }

    return 0;
}

On this instance, the division operation numerator/denominator could throw a std::exception when the denominator is zero. The attempt block comprises the code that may throw an exception, and the catch block catches the exception and handles it appropriately.

Additionally, now you may study Exception Dealing with in C – A Free On-line Course in Hindi

Why Exception Dealing with? 

Exception dealing with is an important idea in programming that permits builders to take care of sudden or distinctive conditions that will happen throughout the execution of a program. These distinctive conditions are also known as “exceptions.” Listed below are some the explanation why exception dealing with is essential:

  1. Error Administration: When a program encounters an error or sudden situation, with out exception dealing with, it’d crash or produce incorrect outcomes. Exception dealing with offers a structured method to take care of errors and permits builders to deal with them gracefully.
  2. Robustness: Exception dealing with enhances the robustness of the software program. By catching and dealing with exceptions, builders can stop your complete program from terminating abruptly and supply customers with significant error messages, making the software program extra user-friendly.
  3. Separation of Issues: Exception dealing with clearly separates regular program circulate and error operating code. This separation makes the code simpler to learn, perceive, and preserve.
  4. Debugging: Exception dealing with aids in debugging the code. When an exception is thrown, this system can log particulars in regards to the error, which helps builders determine and repair the difficulty’s root trigger.
  5. Swish Restoration: In sure circumstances, applications can recuperate from exceptions and proceed execution as an alternative of crashing. For instance, an online server can catch an exception brought on by a client-side error and reply with an applicable HTTP error code as an alternative of shutting down.
  6. Program Stability: By dealing with exceptions appropriately, builders can be sure that this system stays steady and dependable even when going through sudden situations or inputs.
  7. Fail-Protected Operations: Exception dealing with is particularly essential when coping with important operations like file I/O, community communication, or database transactions. Dealing with exceptions accurately makes it potential to roll again transactions or carry out different needed cleanup duties to take care of knowledge integrity.
  8. Modularity: Exception dealing with permits for modular design and promotes code reusability. Capabilities or strategies can throw exceptions, and the calling code can catch and deal with them accordingly.

Primary Key phrases in Exception Dealing with: 

Exception Dealing with in C++ falls round these three key phrases: 

What’s attempt throw catch in c++?

In C++, attempt, throw, and catch are key phrases used for exception dealing with. Exception dealing with permits builders to deal with errors or distinctive conditions gracefully and supply a structured method to handle sudden situations throughout the execution of a program.

Right here’s a quick rationalization of every key phrase:

  1. attempt: The code that may increase an exception is included inside the attempt block. A number of catch blocks come after it. This system seems to be for a catch block that matches the attempt block when an exception is thrown inside the attempt block with the intention to deal with the exception.
  2. throw: To explicitly increase or throw an exception, use the throw key phrase. Within the attempt block, it’s often employed when an distinctive circumstance arises. The management exits the attempt block when the throw assertion is met with the intention to find an acceptable catch block to deal with the exception.
  3. catch: The catch block follows the attempt block and is used to catch and deal with exceptions. It comprises code that executes when a particular sort of exception is thrown inside the related attempt block. A number of catch blocks can be utilized for various exception varieties.
attempt {
    // Code that may throw an exception
    // If an exception is thrown, management jumps to the corresponding catch block
} catch (ExceptionType1 e) {
    // Code to deal with ExceptionType1
} catch (ExceptionType2 e) {
    // Code to deal with ExceptionType2
} catch (...) {
    // Catch-all block to deal with some other unhandled exceptions (non-compulsory)
}

How try-catch in c++ works?

In C++, exception dealing with is finished utilizing the try-catch mechanism. It permits you to catch and deal with exceptions that happen throughout the execution of your program. The attempt block comprises the code that may throw an exception, and it handles the exception if it happens. Right here’s the way it works:

  1. The code that may throw an exception is enclosed inside a attempt block. If an exception happens inside this block, the execution of the code inside the attempt block is instantly stopped, and this system seems to be for an identical catch block to deal with the exception.
  2. After an exception is thrown, this system searches for an identical catch block. An identical catch block is one that may deal with the particular sort of exception that was thrown. If an identical catch block is discovered, the code inside that block is executed.
  3. If no matching catch block is discovered inside the present scope, this system strikes up the decision stack, looking for an applicable catch block within the calling capabilities. This course of continues till an identical catch block is discovered or till this system reaches the highest stage of this system (i.e., most important() perform).
  4. As soon as an identical catch block is discovered, the code inside that block is executed, and this system continues executing from the purpose instantly after the try-catch block.

Right here’s an instance as an instance the utilization of try-catch:

#embody <iostream>

int most important() {
    attempt {
        // Code that may throw an exception
        int num1, num2;
        std::cout << "Enter two numbers: ";
        std::cin >> num1 >> num2;

        if (num2 == 0) {
            throw std::runtime_error("Divide by zero exception");
        }

        int consequence = num1 / num2;
        std::cout << "End result: " << consequence << std::endl;
    }
    catch (const std::exception& e) {
        // Exception dealing with code
        std::cout << "Exception caught: " << e.what() << std::endl;
    }

    return 0;
}

Example1: A number of Code Block

#embody <iostream>

int most important() {
    attempt {
        // Code that will throw an exception
        int numerator = 10;
        int denominator = 0;
        int consequence = numerator / denominator;

        std::cout << "End result: " << consequence << std::endl;
    }
    catch (const std::runtime_error& e) {
        std::cout << "Runtime error occurred: " << e.what() << std::endl;
    }
    catch (const std::exception& e) {
        std::cout << "Exception occurred: " << e.what() << std::endl;
    }

    return 0;
}

Right here, we’ve added an extra catch block to deal with a particular sort of exception, std::runtime_error, earlier than catching the extra common std::exception. The particular exception varieties needs to be caught earlier than the extra common ones.

Example2: Throwing a Customized Exception

#embody <iostream>
#embody <stdexcept>

void checkAge(int age) {
    if (age < 0) {
        throw std::invalid_argument("Age can't be damaging.");
    }
    else if (age < 18) {
        throw std::out_of_range("You should be a minimum of 18 years outdated.");
    }
    else {
        std::cout << "Entry granted." << std::endl;
    }
}

int most important() {
    attempt {
        int userAge = 15;
        checkAge(userAge);
    }
    catch (const std::exception& e) {
        std::cout << "Exception occurred: " << e.what() << std::endl;
    }

    return 0;
}

On this instance, the checkAge the perform throws customized exceptions, std::invalid_argument and std::out_of_range, primarily based on the age worth supplied. The attempt block calls the checkAge perform, and if an exception is thrown, it’s caught and dealt with within the catch block.

Easy methods to use try-catch in c++?

Attempt-catch is a crucial key phrase whereas performing distinctive situations.
Within the Attempt block, the “throw” key phrase throws an exception when the code detects an issue, which lets us create a customized error.
Now “catch” key phrase comes into an image i.e. “catch” key phrase permits you to outline a block of code to be executed if an error happens within the attempt block.

How do you catch exceptions in C++?

To catch exceptions, part of the code is stored underneath inspection. That is achieved by closing that a part of the code in a try-block. When an distinctive circumstance arises inside that block, an exception is thrown and an exception handler takes management over this system.

Easy methods to throw an exception in c++?

In C++, you may throw an exception utilizing the throw key phrase. Exceptions are a method to deal with error situations or distinctive conditions in your code that will disrupt the traditional circulate of execution. When an exception is thrown, this system will cease executing the present block of code and begin looking for an applicable exception handler (catch block) to deal with the exception.

To throw an exception in C++, you sometimes observe these steps:

Outline a customized exception class (non-compulsory):
You may create your personal customized exception class by inheriting from the usual std::exception class or any of its derived courses. This step is non-compulsory, as you too can use the usual exception courses supplied by the C++ Commonplace Library.

Throw the exception:
Use the throw key phrase adopted by the exception object you need to throw. When you’ve got created a customized exception class, you may instantiate an object of that class and go it to the throw assertion.

Catch the exception (non-compulsory):
To deal with the thrown exception, you’ll want to enclose the code that will throw an exception inside a try-catch block. The catch block will catch the thrown exception and assist you to deal with it gracefully.

Right here’s an instance of tips on how to throw and catch an exception in C++:

#embody <iostream>

// Customized exception class (non-compulsory)
class MyException : public std::exception {
public:
    digital const char* what() const noexcept override {
        return "My customized exception occurred!";
    }
};

int most important() {
    attempt {
        int age;
        std::cout << "Enter your age: ";
        std::cin >> age;

        if (age < 0) {
            // Throw a customized exception
            throw MyException();
        }

        // Different code that will throw exceptions
        // ...

    } catch (const MyException& ex) {
        std::cout << "Caught customized exception: " << ex.what() << std::endl;
    } catch (const std::exception& ex) {
        // Catch different exceptions derived from std::exception
        std::cout << "Caught commonplace exception: " << ex.what() << std::endl;
    } catch (...) {
        // Catch some other unhandled exceptions (not really helpful, however might be helpful for debugging)
        std::cout << "Caught unknown exception." << std::endl;
    }

    return 0;
}

On this instance, if the person enters a damaging age, the MyException object will probably be thrown, and it will likely be caught by the corresponding catch block.

C++ Commonplace Exceptions

In C++, you may create your personal user-defined exceptions to deal with particular error situations in your code. Consumer-defined exceptions assist you to outline customized exception varieties that inherit from the usual C++ std::exception class or any of its derived courses. This allows you to throw and catch particular exception varieties that symbolize totally different error conditions.

Right here’s a step-by-step information on tips on how to outline and use user-defined exceptions in C++:

Step 1: Outline your customized exception class

#embody <exception>
#embody <string>

class MyException : public std::exception {
public:
    MyException(const std::string& message) : message_(message) {}

    // Override the what() technique to offer error description
    const char* what() const noexcept override {
        return message_.c_str();
    }

non-public:
    std::string message_;
};

Step 2: Throw the user-defined exception
You may throw the customized exception in your code when a particular error situation is encountered. For instance:

#embody <iostream>

double divideNumbers(double numerator, double denominator) {
    if (denominator == 0) {
        throw MyException("Division by zero is just not allowed.");
    }
    return numerator / denominator;
}

int most important() {
    attempt {
        double consequence = divideNumbers(10.0, 0.0);
        std::cout << "End result: " << consequence << std::endl;
    } catch (const MyException& ex) {
        std::cout << "Error: " << ex.what() << std::endl;
    }

    return 0;
}

On this instance, we outlined a customized MyException class and used it to throw an exception when dividing by zero within the divideNumbers perform. Within the most important perform, we catch the exception and deal with it by printing the error message.

Step 3: Deal with the user-defined exception
When an exception is thrown, you may catch it utilizing a attempt block and deal with it with a corresponding catch block. On this instance, we catch MyException and print its error message utilizing the what() technique.

Consumer-defined exceptions are useful for offering significant error messages and dealing with particular error situations in your code. You may create a number of customized exception courses to symbolize several types of errors, which permits for higher group and readability in your exception dealing with.

What’s C++ Commonplace Exceptions?

C++ commonplace exceptions present a listing of ordinary exceptions outlined in <exception> which we are able to use in our applications.
These exceptions are organized in a parent-child class hierarchy:

Consumer-Outlined Exceptions 

In C++, you may create your personal user-defined exceptions to deal with particular error situations in your code. Consumer-defined exceptions assist you to outline customized exception varieties that inherit from the usual C++ std::exception class or any of its derived courses. This allows you to throw and catch particular exception varieties that symbolize totally different error conditions.

Right here’s a step-by-step information on tips on how to outline and use user-defined exceptions in C++:

Step 1: Outline your customized exception class

#embody <exception>
#embody <string>

class MyException : public std::exception {
public:
    MyException(const std::string& message) : message_(message) {}

    // Override the what() technique to offer error description
    const char* what() const noexcept override {
        return message_.c_str();
    }

non-public:
    std::string message_;
};

Step 2: Throw the user-defined exception
You may throw the customized exception in your code when encountering a particular error situation. For instance:

#embody <iostream>

double divideNumbers(double numerator, double denominator) {
    if (denominator == 0) {
        throw MyException("Division by zero is just not allowed.");
    }
    return numerator / denominator;
}

int most important() {
    attempt {
        double consequence = divideNumbers(10.0, 0.0);
        std::cout << "End result: " << consequence << std::endl;
    } catch (const MyException& ex) {
        std::cout << "Error: " << ex.what() << std::endl;
    }

    return 0;
}

On this instance, we outlined a customized MyException class and used it to throw an exception when dividing by zero within the divideNumbers perform. Within the most important perform, we catch the exception and deal with it by printing the error message.

Step 3: Deal with the user-defined exception
When an exception is thrown, you may catch it utilizing a attempt block and deal with it with a corresponding catch block. On this instance, we catch MyException and print its error message utilizing the what() technique.

Consumer-defined exceptions are useful for offering significant error messages and dealing with particular error situations in your code. You may create a number of customized exception courses to symbolize several types of errors, which permits for higher group and readability in your exception dealing with.

This brings us to the tip of the weblog on Exception Dealing with in C++. Hope this lets you up-skill your C++ abilities. To study extra about programming and different associated ideas, take a look at the programs on Nice Studying Academy

Additionally, if you’re making ready for Interviews, take a look at these Interview Questions for C++ to ace it like a professional

Seize the alternatives that await you thru our dynamic vary of free programs. Whether or not you’re thinking about Cybersecurity, Administration, Cloud Computing, IT, or Software program, we provide a broad spectrum of industry-specific domains. Acquire the important abilities and experience to thrive in your chosen subject and unleash your full potential.

Related Articles

Latest Articles