Middle
Čime se čuvaju izuzeci u C++?
sobes.tech АИ
Одговор од АИ
С објектима. Kada се изузетак баци помоћу throw, креира се привремени објекат који се затим прослеђује механизму за руковање изузецима. Тип тог објекта одређује који catch handler ће бити изабран.
Ево примера који показује како се изузеци чувају у облику објеката:
#include <iostream>
#include <stdexcept>
class MyException {
int error_code;
public:
MyException(int code) : error_code(code) {}
int get_code() const { return error_code; }
};
void test_func(int val) {
if (val < 0) {
// Бацамо изузетак - објекат класе MyException
throw MyException(-1);
}
if (val == 0) {
// Бацамо стандардни изузетак - објекат класе std::runtime_error
throw std::runtime_error("Вредност не може бити нула.");
}
std::cout << "Вредност је позитивна: " << val << std::endl;
}
int main() {
try {
test_func(-5);
} catch (const MyException& e) {
// Хватање изузетка по типу објекта MyException
std::cerr << "Хваћен MyException са кодом: " << e.get_code() << std::endl;
} catch (const std::runtime_error& e) {
// Хватање изузетка по типу објекта std::runtime_error
std::cerr << "Хваћен std::runtime_error: " << e.what() << std::endl;
} catch (...) {
// Хватање било којег другог изузетка
std::cerr << "Непознат изузетак." << std::endl;
}
try {
test_func(0);
} catch (const std::exception& e) {
// Може се ухватити основна класа за стандардне изузетке
std::cerr << "Стандардни изузетак ухваћен: " << e.what() << std::endl;
}
return 0;
}