Istisnolarni generatsiya qilish
C++ o‘zi istisno xolatlarni yuzaga keltirmaydi. Ularni C++ ning throw operatoridan foydalangan dasturlar yuzaga keltiradi. Istisno yuzaga kelganda, throw operatoridagi nom berish ifodasi muvaqqat ob’ektni nomlaydi (initsiallashtiradi), Bunda muvaqqat ob’ektning turi ifoda argumenti (dalili) ning turiga mos keladi. Ushbu ob’ektning boshqa nusxlari, masalan, istisno ob’ektidan nusxa ko‘chirish konstruktori yordamida generatsiya qilinishi mumkin.
Masalan fayl ochilishida dastur xato kelib chiqish shartlarini tekshirish va throw file_open_error() istisno xolatni yuzaga keltirish mumkin.
Kutilmagan istisnolarni qayta ishlash
Agar dasturda kuzda tutilmagan istisno xodisa yuz bersa standart istisnolarni qayta ishlovchi ishlatiladi. Kup xollarda bu standart qayta ishlovchi dastur bajarilishini tuxtatib kuyadi. Avval unexpected() funksiyasi chaqirilib, undan so‘ng ko‘zda tutilgan bo‘yicha terminate() funksiyasi ishga tushadi. Bu funksiya dasturni to‘xtatish uchun abort() funksiyasini chaqiradi. Dasturda maxsus qayta ishlovchidan foydalanish uchun set_unexpected va set_terminate funksiyasidan foydjalanish lozim. Bu funksiyalar prototiplari except.h sarlavxali faylda aniklangan. Bu funksiyalar void tipiga ega bo‘lib parametrsiz bo’ladi.
Istisno xolatning ma’lumotlar elementlaridan foydalanish
Yuqorida ko‘rib o‘tilgan misollarda dastur, catch operatordan foydalanib, qanday istisno xolat ro‘y berganini va ularga tegishli xolda javob berishini imkonini beradi. Masalan, file_open_error istisno xolatda dastur xatoni chaqiruvchi fayl nomini bilish lozim. Istisno xolatga tegishli shunday ma’lumotni saqlash uchun dastur istisno xolat sinfiga ma’lumotlar elementlarini qo‘shish. Agar keyinchalik dastur istisno xolatni yuzaga keltirsa, u ushbu ma’lumotni, quyida ko‘rsatilgandek, istisno xolatiga ishlov beruvchi funksiyaga o‘zgaruvchi sifatida uzatadi:
throw file_open_error(source);
throw file_read_error(344);
Istisno xolatga ishlov berishda bu parametrlar sinfga tegishli o‘zgaruvchilarga o‘zlashtirilishi mumkin (konstruktorga o‘xshaydi). Masalan, sinfning tegishli o‘zgaruvchisiga xatoga yo‘l qo‘ygan faylni ismini o‘zlashtirish uchun quyidagi operatorlar file_open_error istisno xolatni o‘zgartiradi:
class file_open_error
{
public:
file_open_error(char *filename) { strcpy(file_open_error::filename, filename); }
char filename[255] ;
};
Do'stlaringiz bilan baham: |