Класс domain_error
Класс domain_error является одним из стандартных классов исключений в C++.
Он наследуется от класса logic_error и используется для сигнализации о том,
что математическая функция или алгоритм получили аргумент, который находится
вне области определения (домена) этой функции. Например, попытка вычислить
квадратный корень из отрицательного числа или логарифм от нуля может
привести к возникновению исключения domain_error.
Этот класс не имеет собственных методов, кроме унаследованных от
logic_error и exception. Основное его назначение - быть
перехваченным в блоке catch для обработки ошибок, связанных
с недопустимыми значениями аргументов.
Синтаксис
#include <stdexcept>
class domain_error : public logic_error;
Пример
Давайте создадим функцию, которая вычисляет квадратный корень,
и сгенерируем исключение domain_error, если переданное
число отрицательное:
#include <iostream>
#include <stdexcept>
#include <cmath>
using namespace std;
double safe_sqrt(double x)
{
if (x < 0)
{
throw domain_error("Negative argument for sqrt");
}
return sqrt(x);
}
int main()
{
try
{
cout << safe_sqrt(-4) << endl;
}
catch (const domain_error& e)
{
cout << "Caught: " << e.what() << endl;
}
return 0;
}
Результат выполнения кода:
"Caught: Negative argument for sqrt"
Пример
Давайте перехватим исключение domain_error как базовый класс
logic_error, чтобы показать полиморфизм исключений:
#include <iostream>
#include <stdexcept>
using namespace std;
int main()
{
try
{
throw domain_error("Value out of domain");
}
catch (const logic_error& e)
{
cout << "Logic error: " << e.what() << endl;
}
return 0;
}
Результат выполнения кода:
"Logic error: Value out of domain"
Смотрите также
-
класс
logic_error,
который является базовым для domain_error -
класс
invalid_argument,
который сигнализирует о неверном аргументе -
класс
out_of_range,
который сообщает о выходе за допустимые границы -
оператор
throw,
который используется для генерации исключений