1. Dasturlash tillarida sinflar Do’stona funksiyalar


Istisno holatlarni qayta ishlash



Yüklə 78,76 Kb.
səhifə4/6
tarix25.12.2023
ölçüsü78,76 Kb.
#161288
1   2   3   4   5   6
2-ma\'ruza

3. Istisno holatlarni qayta ishlash. C++tili istisnolarga xizmat ko‘rsatish standartini belgilab beradi. Istisno holatlar (exception) dasturda xatoni – kutilmagan xodisani ifodalaydi. Dastur o‘zining ishlab chiqilishida ko‘zda tutilmagan normal bo‘lmagan vaziyatga duch kelganda, boshqaruvni ushbu muammoni hal qilishga qodir bo‘lgan dasturning boshqa qismiga berishi mumkin hamda yo dasturni bajarishni davom ettirish yoki ishni tugallash kerak. Istisnolarni joydan joyga tashlab berish (excpletion throwing) dasturning normal bajarilishiga to‘sqinlik qiladigan sabablarning tashxisi uchun foydali bo‘lishi mumkin bo‘lgan axborotni tashlab berish nuqtasida to‘plash imkonini beradi. Siz dastur tugallanishi oldidan zarur xatti-xarakatlarni bajaradigan istisnolarga ishlov bergich (exception handler) ni aniqlashingiz mumkin. Dastur ichida yuzaga keladigan sinxron istisnolar deb nomlanuvchi istisnolarga xizmat ko‘rsatiladi. Ctrl+C klavishlarini bosish kabi tashqi holatlar istisno hisoblanmaydi.
Dasturda har bir istisno holat sinf sifatida aniqlanadi. Masalan, quyida ko‘rsatilgan holat fayllar bilan ishlash uchun uchta istisno holatni aniqlaydi:
class file_open_error {};
class file_read_error {};
class file_write_error {};
Istisno holatlar o‘zgaruvchilarni va sinf funksiya – elementlarini ishlatish mumkin. Har bir istisno Holat sinfga mos.
Istisnolarni qayta ishlash. Dastur istisno holatni ko‘rishdan va unga javob berishdan oldin istisno holatni aniqlovchi C++dagi try operatorini ishlatish lozim. Istisnolarni generatsiya qila oladigan kod bloki try kalit-so‘z bilan boshlanadi va shakldor qavslar ichiga olinadi. Agar try blok ichida istisnoni topib olsa, dasturiy uzilish sodir bo‘ladi hamda quyidagi hatti-harakatlar ketma-ketligi bajariladi:
1. Dastur istisnoga ishlov bergichning to‘g‘ri keladiganini qidiradi.
2. Agar ishlov bergich topilsa, stek tozalanadi va boshqaruv istisnolarga ishlov bergichga uzatiladi.
3. Agar ishlov bergich topilmagan bo‘lsa, ilovani tugatish uchun terminate funksiyasi chaqiriladi.
Yuzaga kelgan istisnoga ishlov beruvchi kod bloki catch kalit-so‘z bilan boshlanadi va shakldor qavs ichiga olinadi. Istisnoga ishlov bergichning kamida bitta kod bloki bevosita try blokining ortidan kelishi kerak. Dastur generatsiya qilishi mumkin bo‘lgan har bir istisno uchun o‘z ishlov bergichi ko‘zda tutilgan bo‘lishi kerak. Istisnolarga ishlov bergichlar navbatma-navbat ko‘rib chiqiladi hamda turi bo‘yicha catch operatoridagi argument (dalil) turiga to‘qg‘ri keladigan istisnoga ishlov bergich tanlab olinadi. Ishlov bergich tanasida goto operatorlari bo‘lmagan taqdirda, berilgan try bloki istisnolariga ishlov bergichning oxirgisidan keyin kelgan nuqtadan boshlab dasturning bajarilishi yana davom etadi.
Masalan, file_sopy funksiyani chaqirishda quyidagi try operatori istisno holatni aniqlash imkonini beradi:
try
{ file_copy("SOURCE.TXT", "TARGET.TXT") ;
};
Qanday istisno holat ro‘y berganini aniqlash uchun try operatordan so‘ng dastur bitta yoki bir nechta catch operatorlarni joylashtirish lozim:
catch (file_open_error)
{
cerr << "boshlangich yoki maqsadli faylni ochish xatoligi"<< endl;
exit(1);
}
Bu holda xato tipiga qaramasdan kod xabardor qiladi va dasturni tugatadi. Agarda funksiyaning chaqiruvi xatosiz bajarilgan va istisno xatolar aniqlanmagan bo‘lsa C++ catch operatorini shunchaki etiborga olmaydi.
Qayta ishlovchilar tartibi muhimdir.
try
{
// ...
}
catch (ibuf) { // kiritish buferi to‘lishini qayta ishlash
}
catch (io) { // kiritish – chiqarish xatoligini qayta ishlash
}
catch (stdlib) { // bibliotekadagi istisno holatni qayta ishlash
}
catch (...) { // qolgan xamma istisnolarni qayta ishlash
}

Yüklə 78,76 Kb.

Dostları ilə paylaş:
1   2   3   4   5   6




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə