Raqamli texnologiyalar fakulteti dasturiy injiniring yo’nalishi


Barcha turdagi istisnolar uchun qayta ishlovchilar



Download 1,57 Mb.
bet50/81
Sana23.06.2022
Hajmi1,57 Mb.
#695199
1   ...   46   47   48   49   50   51   52   53   ...   81
Bog'liq
Dasturiy injiniring Dasturlash 2-4

Barcha turdagi istisnolar uchun qayta ishlovchilar. Va endi topishmoq: "Funktsiyalar har qanday ma'lumot turidagi istisnolarni tashlashi mumkin va agar istisno ushlanmasa, u stekni bo'shatadi va butun dasturni potentsial ravishda to'xtatadi. Biz funktsiyalarni ularning bajarilishini bilmasdan chaqira oladigan bo'lsak (va shuning uchun ular qanday istisnolar qo'yishi mumkin), buni qanday oldini olishimiz mumkin? "
Yaxshiyamki, C ++ tili bizga barcha turdagi istisnolarni aniqlash / boshqarish mexanizmini taqdim etadi - catch-all ishlov beruvchi. Hammasini ushlab turadigan ishlov beruvchi oddiy catch bloki bilan bir xil ishlaydi, faqat ma'lum bir ma'lumot turidagi istisnolarni ko'rib chiqish o'rniga u ma'lumotlar turi sifatida uchta nuqtadan (...) foydalanadi va biz allaqachon bilganimizdek, … istalgan turdagi ma'lumotlarning argumentlarini funksiyaga o'tkazish uchun ishlatilishi mumkin. Shu nuqtai nazardan, ular har qanday turdagi ma'lumotlarning istisnolarini ifodalaydi. Mana oddiy misol:
#include
int main()
{
try
{
throw 7; // int tipidagi istisno genratsiya qilinadi
}
catch (double a)
{
cout << "Biz double turidagi istisnoni ushladik: " << a << '\n';
}
catch (...) // catch-all
{
cout << "Biz aniqlanmagan turdagi istisnoni qo'lga oldik!\n";
}
}

int uchun maxsus catch ishlov beruvchisi mavjud emasligi sababli, catch-all ishlov beruvchi bu istisnoni ushlaydi. Shunday qilib, natija:


“Biz aniqlanmagan turdagi istisnoni qo'lga oldik!”
Hammasini ushlab turuvchi tutqich 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.
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.





Download 1,57 Mb.

Do'stlaringiz bilan baham:
1   ...   46   47   48   49   50   51   52   53   ...   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