Исключениями являются прерывания во время выполнения или, как мы говорим, случаи, которые не определены и встречаются во время их выполнения.
Два типа исключений
- Синхронное исключение:- Синхронное исключение означает, что исключения могут возникать только из выброшенных исключений. Стандарт C++ поддерживает синхронную обработку исключений с моделью завершения.
- Асинхронное исключение: асинхронные исключения вызываются из-за событий или сбоев (генерируемых извне) в программе и не поддаются контролю программы и называются асинхронными исключениями. Этот тип исключения достигается с помощью специальных ключевых слов, которые:
- Попробовать: представляет собой блок кода, который вызывает исключение, или мы говорим, что он сообщает об ошибке исключения.
- 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";
}
- Исключение производного класса всегда перехватывается перед исключением базового класса.
Типы Блок-уловитель
- 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; }
Выход: -