Что же такое исключения в C++
Исключения в C++ - это механизм, который позволяет обнаруживать и обрабатывать ошибки во время выполнения программы. Исключения могут быть сгенерированы оператором throw или автоматически при возникновении некоторых ошибок, таких как деление на ноль, выход за границы массива или нехватка памяти. Исключения могут быть перехвачены и обработаны с помощью конструкции try…catch, которая определяет блок кода, в котором может произойти исключение, и блок кода, в котором исключение обрабатывается.
Исключения могут иметь различные типы, которые определяют характер ошибки и передают дополнительную информацию об исключении. Некоторые типы исключений являются стандартными и определены в библиотеке <stdexcept>. Основные из них:
logic_error: общий тип исключений, которые возникают из-за ошибок логики или программирования.
invalid_argument: исключение, которое возникает, когда аргумент функции недопустим или некорректен.
domain_error: исключение, которое возникает, когда аргумент функции выходит за пределы допустимого домена.
length_error: исключение, которое возникает, когда попытка создать объект превышает его максимально допустимый размер.
out_of_range: исключение, которое возникает, когда попытка доступа к элементу контейнера, который находится за его границами.
runtime_error: общий тип исключений, которые возникают во время выполнения из-за ошибок среды или системы.
range_error: исключение, которое возникает, когда результат операции выходит за пределы допустимого диапазона.
overflow_error: исключение, которое возникает, когда результат арифметической операции превышает максимально допустимое значение.
underflow_error: исключение, которое возникает, когда результат арифметической операции меньше минимально допустимого значения.
Кроме стандартных типов исключений, можно определять свои собственные типы исключений, наследуясь от класса exception или его потомков. Например:
#include <iostream>
#include <exception>
using namespace std;
// Определение собственного типа исключения
class MyException : public exception {
public:
// Переопределение метода what(), который возвращает сообщение об исключении
const char* what() const noexcept override {
return "My exception occurred";
}
};
// Функция, которая генерирует исключение типа MyException
void func() {
throw MyException();
}
int main() {
try {
func(); // Вызов функции, которая генерирует исключение
}
catch (MyException& e) { // Перехват исключения типа MyException
cout << e.what() << endl; // Вывод сообщения об исключении
}
return 0;
}
В этом примере определяется класс MyException, который наследуется от класса exception и переопределяет метод what(), который возвращает сообщение об исключении. Затем в функции func() генерируется исключение типа MyException с помощью оператора throw. В функции main() используется конструкция try…catch для перехвата и обработки исключения типа MyException. В блоке catch выводится сообщение об исключении с помощью метода what().
Исключения в C++ позволяют эффективно и безопасно обрабатывать ошибки в программе, а также разделять код, который может вызвать ошибку, от кода, который может ее обработать.
Интересные факты и фичи языков программирования у нас в канале, заходи :)