Свое исключение в C++
Ошибку можно передать наружу объектом. Команда throw
прерывает обычный ход и несет этот объект. Команда
catch его ловит.
Свой класс ошибки наследуют от std::exception.
Метод what возвращает текст ошибки. Слово
noexcept здесь нужно, потому что так помечен
what у std::exception: метод обещает
не передавать новую ошибку. Запишем AppError:
#include <exception>
class AppError : public std::exception {
public:
AppError(const char* text) : text(text) {
}
const char* what() const noexcept override {
return text;
}
private:
const char* text;
};
Создадим объект AppError, бросим его и поймаем в catch:
int main() {
try {
throw AppError("bad value");
}
catch (const AppError& err) {
std::cout << err.what() << "\n";
}
return 0;
}
Сделайте класс RangeError,
наследующий std::exception,
бросьте его с текстом out of range
и выведите сообщение в catch.