Raqamli texnologiyalar fakulteti dasturiy injiniring yo’nalishi


Xotirani tozalash uchun funktsional try blokidan foydalanmang



Download 1,57 Mb.
bet57/81
Sana23.06.2022
Hajmi1,57 Mb.
#695199
1   ...   53   54   55   56   57   58   59   60   ...   81
Bog'liq
Dasturiy injiniring Dasturlash 2-4

Xotirani tozalash uchun funktsional try blokidan foydalanmang

Agar ob'ektni yaratish operatsiyasi muvaffaqiyatsiz bo'lsa, u holda sinf destruktori chaqirilmaydi. Shuning uchun siz sinfga ajratilgan xotiraning bir qismini tozalash uchun funktsional tr foydalanish vasvasasiga tushishingiz mumkin. Biroq, ob'ektning yaratilmagan a'zolariga kirish aniqlanmagan xatti-harakatlar hisoblanadi, chunki ob'ekt catch bloki ishga tushishidan oldin ham "o'lik" bo'ladi. Bu sinfni tozalashni amalga oshirish uchun funktsional sinash blokidan foydalana olmasligingizni anglatadi.




Xulosa
Funktsional try bloklari, asosan, xatolarni murojaatlar to'plamiga o'tkazishdan oldin jurnal fayliga yozish yoki istisno turini o'zgartirish uchun foydalidir.
try
{
runGame();
}
catch(...)
{
cerr << "Abnormal termination\n";
}
saveState(); // o'yinchining joriy holatini saqlash
return 1;
}


Misol. Xatoliklarni ushlash uchun Exception sinfini yarating. Throw va catch dan foydalanib oddiy matn kiritilganda istisnoni generatsiya qiling.
#include
#include
using namespace std;
class Exception
{
private: string m_msg;

public:
Exception(const string& msg)


{
m_msg = msg;
}
string getMessage() const
{
return(m_msg);
}
~Exception()
{

}
};


void f()
{
throw(Exception("Xatolik!"));
}
int main()
{
try
{
f();
}
catch(Exception& e)
{
cout << "Sizda istisno bor: " << e.getMessage( ) << endl;
}
}

Misol. Stack nomli sinf hosil qiling. Uning tarkibida element qo’shish va element olib tashlash metodlari bo’lsin. Stek to’lib ketganda va stekda element mavjud bo’lmaganda istisnoni generatsiya qiling.
#include
using namespace std;
const int MAX = 3; //Stekka maksimum 3 ta butun
//qo'shish mumkinligini belgilash
class Stack
{
private:
int st[MAX]; // stek: butunsonli massiv
int top; // stening yuqori indeksi
public:
class Range // Stack uchun istisnoli sinf
{ // Diqqat: sinfning tanasi bo'sh
};
Stack() //konstruktor
{
top = -1;
}
void push(int var)
{
if(top >= MAX - 1) // agar stek to'lgan bo'lsa,
throw Range(); // istisno generatsiya qilamiz
st[++top] = var; // aks holda stekka sonni yozamiz
}
int pop()
{
if(top < 0) // agar stek bo'sh bo'lsa,
throw Range(); // istisno
return st[top--]; // stekdan sonni olib tashlash
}
};
int main()
{
Stack s1;
try
{
s1.push(11);
s1.push(22);
s1.push(33);
// s1.push(44); // Stek to'lgan
cout << "1: " << s1.pop() << endl;
cout << "2: " << s1.pop() << endl;
cout << "3: " << s1.pop() << endl;
cout << "4: " << s1.pop() << endl; // Stek bo'sh
catch(Stack::Range) // ishlab chiqish
{
cout << "Istisno: Stek to'lgan yoki bo'sh"<< endl;
}
cout << "Istisno (yoki oddiy chiqish)ni qo'lga kiritgandan keyin bu yerga keldim" << endl;
return 0;
}

Misol. Distance (Masofa) nomli sinf hosil qiling. Uning maydonlari butun sonli fut va haqiqiy tipdagi dyum qiymatlaridan iborat. Bunday holda, dyum qiymati 12.0 dan oshmasligi kerak. Agar belgilangan shart bajarilmasa istisnolarni generatsiya qiling.
#include
using namespace std;

class Distance //


{
private:
int feet;
float inches;
public:
class InchesEx { }; //istisno sinf
//---------------------------------------------------------
Distance()
{
feet = 0;
inches = 0.0;
}

Distance(int ft, float in)


{
if(in >= 12.0) // dyum noto'g'ri ko'rsatilgan bo'lsa,
throw InchesEx(); //istisno generatsiya qilinsin
feet = ft;
inches = in;
}
void getdist() // foydalanuvchidan uzunlikni oling
{
cout << "\n Futni kiriting: "; cin >> feet;
cout << "Dyumni kiriting: "; cin >> inches;
if(inches >= 12.0) // agar dyum noto'g'ri kiritilgan bo'lsa,
throw InchesEx(); // istisno generatsiya qilinsin
}
//---------------------------------------------------------
void showdist() // masofani chop etish
{
cout << feet << "\'-" << inches << '\"'; }
};
///////////////////////////////////////////////////////////
int main()
{
try
{
Distance dist1(17, 3.5);
Distance dist2;
dist2.getdist();
cout << "\ndist1 = "; dist1.showdist();
cout << "\ndist2 = "; dist2.showdist();
}
catch(Distance::InchesEx) // istisnolarni ushlash
{
cout << "\nInitsializatsiya xato: dyuym chegaradan oshib ketdi.";
}
cout << endl;
return 0;
}


Download 1,57 Mb.

Do'stlaringiz bilan baham:
1   ...   53   54   55   56   57   58   59   60   ...   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