Middle
Иловаҳо дар C++ бо чӣ нигоҳ дошта мешаванд?
sobes.tech AI
Ҷавоб аз AI
Бо объектҳо. Вақте ки бо throw истисно меандозем, объекти муваққатӣ эҷод мешавад, ки сипас ба механизмҳои идоракунии истисноҳо интиқол дода мешавад. Навъи ин объект муайян мекунад, ки кадом catch коркардкунанда интихоб мешавад.
Ин аст як мисол, ки нишон медиҳад, чӣ гуна истисноҳо дар шакли объектҳо нигоҳ дошта мешаванд:
#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;
}