Darsliklar C++ try va catch

C++ C++ try va catch

Xatolarni boshqarish (try va catch) — havaskor dasturchini professionaldan ajratib turadigan mavzu. Har qanday dastur xato bilan uchrashadi: foydalanuvchi noto’g’ri ma’lumot kiritadi, xotira yetmaydi, nolga bo’lish sodir bo’ladi. Yaxshi dastur bunda “qulab tushmaydi”, balki xatoni ushlab, oqilona javob beradi. Bu — C++ qo’llanmasining yakuniy mavzusi.

Istisno (exception)dastur ijrosi vaqtida yuzaga keladigan g’ayrioddiy holat. C++’da try, throw va catch mexanizmi bunday holatni ushlab, dasturning to’xtab qolishining oldini oladi.

try va catch tuzilishi

try blokiga xavfli kodni, catch blokiga esa xato yuz berganda bajariladigan kodni yozamiz. Xatoni throw “otadi”:

#include <iostream>
using namespace std;

int main() {
    int yosh = -5;
    try {
        if (yosh < 0) {
            throw "Yosh manfiy bo'lishi mumkin emas";
        }
        cout << "Yosh: " << yosh << endl;
    } catch (const char* xato) {
        cout << "Xato ushlandi: " << xato << endl;
    }
    cout << "Dastur davom etmoqda" << endl;
    return 0;
}
Xato ushlandi: Yosh manfiy bo'lishi mumkin emas
Dastur davom etmoqda

throw xato “otdi”, catch uni ushladi va tushunarli xabar berdi. Eng muhimi: dastur qulamadi, oxirgi qatorgacha ishlashda davom etdi.

Turli turdagi xatolar

throw istalgan turdagi qiymatni ota oladi: matn, son yoki maxsus istisno obyekti. catch esa mos turini ushlaydi:

#include <iostream>
using namespace std;

double bolish(int a, int b) {
    if (b == 0) {
        throw runtime_error("Nolga bo'lish mumkin emas");
    }
    return (double)a / b;
}

int main() {
    try {
        cout << bolish(10, 2) << endl;
        cout << bolish(5, 0) << endl;   // bu xato beradi
    } catch (runtime_error& xato) {
        cout << "Xato: " << xato.what() << endl;
    }
    return 0;
}
5
Xato: Nolga bo'lish mumkin emas

runtime_error — standart istisno klassi. Uning what() metodi xato xabarini qaytaradi. Birinchi bo’lish muvaffaqiyatli o’tdi, ikkinchisi xato otdi va catch uni ushladi.

Bir necha catch bloki

Turli xato turlarini alohida ushlash uchun bir necha catch yozish mumkin. Ularni jadvalda ko’ramiz:

Istisno turi Qachon yuzaga keladi
runtime_error ijro vaqtidagi mantiqiy xato
out_of_range chegaradan chiqishda
invalid_argument noto’g’ri argumentda
... (uchta nuqta) har qanday xatoni ushlaydi

Nima uchun bu muhim?

Xatolarni boshqarish katta tizimlarda hal qiluvchi ahamiyatga ega. Bitta ushlanmagan xato butun dasturni qulatishi mumkin. try-catch bu xatolarni izolyatsiya qiladi, tizimga tushunarli javob berish va tiklanish imkonini beradi. Bu — barqaror, ishonchli dastur yozishning belgisi.

Xulosa

Bu bo’limda try, throw, catch bilan xatolarni ushlash, standart istisnolar (runtime_error) va what() metodi, bir necha catch va xatolarni boshqarishning ahamiyatini ko’rib chiqdik. Xatolarni to’g’ri boshqarish — professional dasturchining belgisi.