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;
}