Raqamli texnologiyalar fakulteti dasturiy injiniring yo’nalishi


-misol. main() funksiyasida catch-all ishlov beruvchisidan foydalanish



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

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

#include


using namespace std;
int main()
{
8-misol. Nolga bo’lishni ushlash

#include ;


using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
int num1;
int num2;
int var = 2;
while(var--)
{
cout << " num1= ";
cin >> num1;
cout << " num2= ";
cin >> num2;
cout << "num1 + num2 = " << num1 + num2 << endl;
cout << "num1 / num2 = ";
try //код, который может привести к ошибке, располагается тут
{
if (num2 == 0)
{
throw 123; //генерировать целое число 123
}
cout << num1 / num2 << endl;
}
catch(int i)//сюда передастся число 123
{
cout << "Xatolik №" << i << " – no’lga bo’lish mumkin emas!!!!" << endl;
}
cout << "num1 - num2 = " << num1 - num2 << endl;
cout << "=================================" << endl << endl;
}
cout << "Dastur o’z ishini tugatdi!" << endl << endl;;
return 0;
}


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   ...   47   48   49   50   51   52   53   54   ...   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