|
G’ayri oddiy holatni qayta ishlovchini ta'riflash
|
bet | 88/89 | Sana | 16.11.2023 | Hajmi | 313,45 Kb. | | #100010 |
Bog'liq @AKT Official C haqida o\'zbekcha darslar majmuiG’ayri oddiy holatni qayta ishlovchini ta'riflash
Dastur g’ayri oddiy holatni generatsiya qilganda kompilyator g’ayri oddiy holatni qayta ishlovchi funktsiyani chaqiradi. Misol uchun qo’yidagi nuke_meltdown gayri oddiy hodisa sinfi bu holatni qayta ishlovchi nuke_meltdown funktsiyasini anilqaydi:
class nuke_meltdown
{
public:
nuke_meltdown(void){ cerr << "\a\a\aRabotayu! Rabotayu! Rabotayu!" << endl; }
};
Bu misoldjva dasturda nuke_meltdown g’ayri oddiy hodisasi generatsiya bo’lganda, C++ nuke_meltdown funktsiyasi operatorlarini ishga tushiradi, shundan so’ng g’ayri oddiy holatni aniqlashgga ruhsat beruvchi try operatoridan so’ng kelgan operatorga boshqarishni uzatadi. Qo’yidagi MELTDOWN.CPP dasturi nuke_meltdown funktsiyasini bajarilishini ko’rsatadi. Bu dasturda try operatoridan g’ayri oddiy holatni aniqlashda ruhsat berish uchun foydalaniladi. Shundan so’ng dastur add_u232 funktsiyani amount parametri bilan chaqiradi. Agar bu parametr qiymati 255 dan kam bo’lsa, funktsiya muvaffaqiyatli bajarilmoqda. Agar parametr qiymati 255 dan oshiq bo’lsa funktsiya nuke_meltdown g’ayri oddiy holatini generatsiya qiladi:
#include
class nuke_meltdown
{
public:
nuke_meltdown(void){ cerr << "\a\a\aRabotayu! Rabotayu! Rabotayu!" << endl; }
};
void add_u232(int amount)
{
if (amount < 255) cout << "Parametr add_u232 v poryadke" << endl;
else throw nuke_meltdown();
}
void main(void)
{
try
{
add_u232(255);
}
catch (nuke_meltdown)
{
cerr << "Programma ustoychiva" << endl;
}
}
Bu dastur bajarilganda qo’yidagi ma'lumot ekranga chiqariladi:
S:\> MELTDOWN
Rabotayu! Rabotayu! Rabotayu!
Programma ustoychiva
G’ayri oddiy holat ma'lumot elemenlaridan foydalanish.
Oldingi misollarda dastur catch operatori yordamida qanday g’ayri oddiy holat yuz berganini aniqlashi mumkin edi. G’ayri oddiy holat haqida qancha ko’p ma'lumot olinsa shunchalik hatoga to’g’ri reaktsiya qilishi mumkindir. Misol uchun file_open_error hodisasi yuz berganda hato keltirib chiqargan fayl nomini bilish zarurdir. Shunga uhshab file_read_error va file_write_error dasturda hato joylashgan baytni bilish kerak bo’lishi mumkin. Bunday ma'lumotlarni saklab qolish uchun bu ma'lumotlarni g’ayri oddiy holat sinfiga element sifatida kiritib qo’yish mumkindir. Keyinchalik g’ayri oddiy hodisa yuz berganda dastur bu ma'lumotni qayta ishlovchi funktsiyaga parametr sifatida uzatishshi mumkindir:
throw file_open_error(source);
throw file_read_error(344);
Gayri oddiy holatni kayta ishlovchida bu parametrlar sinfning mos parametrlariga berib kuyilmishi mumkin. Masalan:
class file_open_error
{
public:
file_open_error(char *filename) { strcpy(file_open_error::filename, filename); }
char filename[255] ;
};
|
| |