Raqamli texnologiyalar fakulteti dasturiy injiniring yo’nalishi



Download 1,57 Mb.
bet11/81
Sana23.06.2022
Hajmi1,57 Mb.
#695199
1   ...   7   8   9   10   11   12   13   14   ...   81
Bog'liq
Dasturiy injiniring Dasturlash 2-4

catch-all ishlov beruvchisi catch bloklari zanjirida oxirgi bo'lishi kerak. Shunday qilib, istisnolar birinchi navbatda ma'lum ma'lumotlar turlariga moslashtirilgan (agar ular umuman mavjud bo'lsa) ushlagichlar tomonidan ushlanishi mumkin. Bu boshqa kompilyatorlar haqida Visual Studio'da nazorat qilinadi - bunday cheklov mavjudligiga ishonchim komil emas.
Ko'pincha catch-all ishlov beruvchi bloki bo'sh qoladi:

catch(...) {}


Ushbu ishlov beruvchi har qanday kutilmagan istisnolarni ushlaydi va stekni yechishning oldini oladi (va shuning uchun butun dasturni potentsial ravishda to'xtatadi), lekin bu yerda hech qanday istisno bilan ishlashni amalga oshirmaydi.




main() funksiyasida catch-all ishlov beruvchisidan foydalanish
Quyidagi dasturni ko'rib chiqaylik:

#include


using namespace std;
int main()
{
try
{
runGame();
}
catch(...)
{
cerr << "Abnormal termination\n";
}
saveState(); // o'yinchining joriy holatini saqlash
return 1;
}

Bunday holda, agar runGame() funksiyasi yoki runGame() da chaqirilgan har qanday funksiya yuqoridagi stekdagi funksiyalar tomonidan ushlanmaydigan istisnolarni keltirib chiqarsa, u oxir-oqibat catch-all ishlov beruvchisida tugaydi. Bu main() ni to'ldirishga to'sqinlik qiladi va bizga tanlagan xato xabarini ko'rsatish imkoniyatini beradi va keyin dastur chiqmaguncha foydalanuvchi holatini saqlab qoladi. Bu kutilmagan muammolarni aniqlash va tuzatish uchun foydali bo'lishi mumkin.




Istisno sinflar va merosxo’rlik


Operatorni qayta yuklashdagi istisnolar. Oddiy butun sonli massiv sinfi uchun indekslash operatorining quyidagi qayta yuklanishini ko'rib chiqaylik:

int& ArrayInt::operator[](const int index)


{
return m_data[index];
}
Garchi bu funksiya yaxshi ishlayotgan bo'lsa-da, u faqat o'zgaruvchi indeks qiymati to'g'ri massiv indeksi bo'lsagina ishlaydi. Bu yerda xatolarni qayta ishlash mexanizmining yetishmasligi aniq. Indeksni tasdiqlash uchun assert bayonotini qo'shamiz:

int& ArrayInt::operator[](const int index)


{
assert (index >= 0 && index < getLength());
return m_data[index];
}

Endi, agar foydalanuvchi noto'g'ri indexga o'tsa, dastur xatoga yo'l qo'yadi. Garchi bu foydalanuvchiga nimadir noto'g'ri ketganligi haqida xabar bersa ham, eng yaxshi variant callerga nimadir noto'g'ri bo'lganligi haqida “jimgina” xabar berish va unga buni aniqlashga imkon berishdir (biz aniq qanday qilib yozamiz).


Afsuski, operatorning qayta yuklanishi qabul qilishi va qaytarishi mumkin bo'lgan parametrlar soni va turiga maxsus talablarga ega bo'lganligi sababli, murojaat qiluvchiga xato kodlari yoki mantiqiy ma'lumotlarni uzatish uchun moslashuvchanlik yo'q. Biroq, biz funksiya signaturasi o'zgartirmaydigan istisnolardan foydalanishimiz mumkin, masalan:

int& ArrayInt::operator[](const int index)


{
if (index < 0 || index >= getLength())
throw index;
return m_data[index];
}

Endi, agar foydalanuvchi noto'g'ri index ni kiritsa, [] operatori int istisnosini chiqaradi.



Download 1,57 Mb.

Do'stlaringiz bilan baham:
1   ...   7   8   9   10   11   12   13   14   ...   81




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish