Istisno holatlar (Exceptions)
Istisno holatlar
C++ Xatoliklar bobida aytilganidek, dastur ishlayotganda turli xil xatolar yuz berishi mumkin — kodlash xatolari, noto'g'ri kiritish yoki kutilmagan holatlar.
Xatolik yuz berganda, C++ odatda to'xtaydi va xato xabarini yaratadi. Buning texnik atamasi: C++ istisno holat (xato) tashlaydi.
Istisno holatlarni boshqarish (try va catch)
Istisno holatlarni boshqarish ish vaqtida xatolarni ushlash va boshqarish imkonini beradi — shunda dasturingiz to'xtab qolmaydi.
U uchta kalit so'zni ishlatadi:
try— sinovdan o'tkaziladigan kodni belgilaydithrow— istisno holatni ishga tushiradicatch— xatoni boshqaradi
MISOL
try {
// Istisno tashlashi mumkin bo'lgan kod
throw 505;
}
catch (int errorCode) {
cout << "Xatolik yuz berdi: " << errorCode;
}Bu yerda dastur 505 qiymati bilan istisno tashlaydi va u catch blokida ushlanib, boshqariladi.
Hayotiy misol: Yosh tekshiruvi
Foydalanuvchining yoshi yetarli ekanligini tekshirish uchun istisno holatlarni boshqarishni ishlatishimiz mumkin:
MISOL
try {
int age = 15;
if (age >= 18) {
cout << "Kirish ruxsat etildi - yoshi yetarli.";
} else {
throw (age);
}
}
catch (int myNum) {
cout << "Kirish rad etildi - kamida 18 yosh bo'lishi kerak.\n";
cout << "Yosh: " << myNum;
}Misol tushuntirishi
Biz try blokida kodni sinaymiz: agar age o'zgaruvchisi 18 dan kichik bo'lsa, istisno tashlaymiz va uni catch blokimizda boshqaramiz.
catch blokida xatoni ushlaymiz va tegishli amal qilamiz. catch operatori parametr oladi: bizning misolda int o'zgaruvchisi (myNum) ishlatiladi (try blokida int turidagi istisno (age) tashlaganimiz uchun), yoshning qiymatini chiqarish uchun.
Agar xato yuz bermasa (masalan, age 15 o'rniga 20 bo'lsa), catch bloki o'tkazib yuboriladi.
throw kalit so'zidan maxsus xato raqamini ham chiqarish mumkin:
MISOL
try {
int age = 15;
if (age >= 18) {
cout << "Kirish ruxsat etildi - yoshi yetarli.";
} else {
throw 505;
}
}
catch (int myNum) {
cout << "Kirish rad etildi - kamida 18 yosh bo'lishi kerak.\n";
cout << "Xato raqami: " << myNum;
}Har qanday turdagi istisnolarni boshqarish (...)
Agar try blokida ishlatiladigan throw turini bilmasangiz, catch bloki ichida "uch nuqta" sintaksisidan (...) foydalanishingiz mumkin — u har qanday turdagi istisnoni boshqaradi:
MISOL
try {
int age = 15;
if (age >= 18) {
cout << "Kirish ruxsat etildi - yoshi yetarli.";
} else {
throw 505;
}
}
catch (...) {
cout << "Kirish rad etildi - kamida 18 yosh bo'lishi kerak.\n";
}