Исключениями являются прерывания во время выполнения или, как мы говорим, случаи, которые не определены и встречаются во время их выполнения.

Два типа исключений

  1. Синхронное исключение:- Синхронное исключение означает, что исключения могут возникать только из выброшенных исключений. Стандарт C++ поддерживает синхронную обработку исключений с моделью завершения.
  2. Асинхронное исключение: асинхронные исключения вызываются из-за событий или сбоев (генерируемых извне) в программе и не поддаются контролю программы и называются асинхронными исключениями. Этот тип исключения достигается с помощью специальных ключевых слов, которые:
  • Попробовать: представляет собой блок кода, который вызывает исключение, или мы говорим, что он сообщает об ошибке исключения.
  • Catch: представляет собой блок кода, который выполняется при возникновении определенного исключения.
  • Throw: используется для создания исключения. Также используется список исключений, которые выдает функция.

Почему обработка исключений?

Вот причины, по которым мы должны использовать обработку исключений:

  • Отделение кода обработки ошибок от обычного кода.
  • Функции/методы могут обрабатывать любые исключения по своему выбору.
  • Группировка типов ошибок.

Попробуйте и поймайте блок

  • Операторы try позволяют вам определить блок кода, который проверяет ошибку во время выполнения.
  • Ключевое слово Throw вызовет исключение, когда возникнет исключение.
  • Ключевое слово Catch позволит вам определить, что делать при возникновении исключения.

Особенности обработки исключений

  • Существует специальный блок catch, который будет принимать все типы выбрасываемых исключений.
try{
    throw 01;
}
catch(...){
    cout<<"Exception Arises";
}
  • Неявное преобразование типов не происходит для примитивных типов.
try{
    throw 'a';
}
catch(int x){
    cout<<"Int type exception Caught";
}
catch(...){
    cout<<"Default";
}
  • Если возникает какое-либо исключение и нет блока catch, программа аварийно завершается.
try{
    throw 'a';
}
catch(int x){
  cout<<"Exception arises";
}
  • Исключение производного класса всегда перехватывается перед исключением базового класса.

Типы Блок-уловитель

  1. Int Catch. Выданная ошибка типа Int будет соответствовать блоку catch.
try{
    throw 101;
}
catch(int x){
  cout<<"Exception arises";
}

2. Char Catch: выданная ошибка типа Char будет соответствовать блоку catch.

try{
    throw 'a';
}
catch(char x){
  cout<<"Exception arises";
}

3. String Catch: выданная ошибка типа String будет сопоставлена ​​с блоком catch.

try{
    throw "Error";
}
catch(string x){
  cout<<"Exception arises";
}

4. double Catch: выданная ошибка типа double будет соответствовать блоку catch.

try{
    throw 1.01;
}
catch(double x){
  cout<<"Exception arises";
}

5. Universal Catch: все типы выдаваемых ошибок будут сопоставляться с блоком catch.

try{
    throw 'a';
}
catch(...){
  cout<<"Exception arises";
}

Образец кода

#include <iostream>
using namespace std;
int main(){
ios_base::sync_with_stdio(false);
cout.tie(0);
cin.tie(0);
int div, a, b, ch = 0;
printf("\nEnter Two number for Division \n");
cin >> a >> b;
// By Inputting the value it will enter try block and check condition if b=0 then throw the exception.
try
{
if (b == 0){
throw 101;
}
div = a / b;
cout << "The division is : " << div;
}
// Catch block will catch the error.
catch (int e)
{
cout << "\nThese lines are executed because we given a undefined thing which is an exception for program and we also specified the error error done by user\n\n";
cout << "------------------Error------------------------";
cout << "\n\nDivision by zero is Undefined "
<< "Error Code --> " << e;
cout << "\n\n------------------------------------------\n";
}

// This will catch the error when double type exception is thrown
catch (double e)
{
cout << "Double Val thrown";
}
// This will catch the error when char type exception is thrown
catch (char e)
{
cout << "Char Val thrown";
}
// This will catch the error when string type exception is thrown
catch (string e)
{
cout << "string Val thrown";
}
// This will catch the error when above block not catch the exception thrown.
catch (...)
{
cout << "All catches handeled";
}
return 0;
}

Выход: -