Istisnolarni qayta ishlash


Download 21.88 Kb.
bet1/3
Sana04.08.2022
Hajmi21.88 Kb.
#790783
  1   2   3
Bog'liq
istisnolar


Istisnolarni qayta ishlash.

Reja:




  1. Istisnolar.

  2. Istisnolarni qayta ishlash.

  3. Istisnolar generatsiyasi.

  4. Istisno xolatning ma’lumotlar elementlaridan foydalanish

  5. Istisno xolatlar va sinflar

  6. Istisnolar va konstruktorlar

Istisnolar
C++tili istisnolarga xizmat ko‘rsatish standartini belgilab beradi. Istisno xolatlar (exception) dasturda xatoni – kutilmagan xodisani ifodalaydi. Dastur o‘zining ishlab chiqilishida ko‘zda tutilmagan normal bo‘lmagan vaziyatga duch kelganda, boshqaruvni ushbu muammoni xal qilishga qodir bo‘lgan dasturning boshqa qismiga berishi mumkin xamda 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 klavishalarini bosish kabi tashqi xolatlar istisno xisoblanmaydi.
Dasturda xar bir istisno xolat sinf sifatida aniqlanadi. Masalan, quyida ko‘rsatilan xolat fayllar bilan ishlash uchun uchta istisno xolatni aniqlaydi:
class file_open_error {};
class file_read_error {};
class file_write_error {};
Istisno xolatlar o‘zgaruvchilarni va sinf funksiya – elementlarini ishlatish mumkin. Xar bir istisno xolat sinfga mos.
Istisnolarni qayta ishlash
Dastur istisno xolatni ko‘rishdan va unga javob berishdan oldin istisno xolatni 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 xamda quyidagi xatti-xarakatlar 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 xar bir istisno uchun o‘z ishlov bergichi ko‘zda tutilgan bo‘lishi kerak. Istisnolarga ishlov bergichlar navbatma-navbat ko‘rib chiqiladi xamda 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 xolatni aniqlash imkonini beradi:
try
{ file_copy("SOURCE.TXT", "TARGET.TXT") ;
};
Qanday istisno xolat 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 xolda 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 muximdir.
try
{
// ...
}
catch (ibuf) { // kiritish buferi to‘lishini qayta ishlash
}
catch (io) { // kiritish – chiqarish xatoligini qayta ishlash
}
catch (stdlib) { // bibliotekadagi istisno xolatni qayta ishlash
}
catch (...) { // qolgan xamma istisnolarni qayta ishlash
}



Download 21.88 Kb.

Do'stlaringiz bilan baham:
  1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2022
ma'muriyatiga murojaat qiling