1-ma’ruza C++ da Sinflar va obyektlar. Konstruktor va destruktor. Sinf usullari reja


Istisno xolatning ma’lumotlar elementlaridan foydalanish


Download 86.61 Kb.
bet20/23
Sana09.06.2023
Hajmi86.61 Kb.
#1472539
1   ...   15   16   17   18   19   20   21   22   23
Bog'liq
Algoritmlashga kirish fanidan majmua

5.5. Istisno xolatning ma’lumotlar elementlaridan foydalanish
Yuqorida ko‘rib o‘tilgan misollarda dastur, catch operatordan foydalanib, qanday istisno xolat ro‘y berganini va ularga tegishli xolda javob berishini imkonini beradi. Masalan, file_open_error istisno xolatda dastur xatoni chaqiruvchi fayl nomini bilish lozim. Istisno xolatga tegishli shunday ma’lumotni saqlash uchun dastur istisno xolat sinfiga ma’lumotlar elementlarini qo‘shish. Agar keyinchalik dastur istisno xolatni yuzaga keltirsa, u ushbu ma’lumotni, quyida ko‘rsatilgandek, istisno xolatiga ishlov beruvchi funksiyaga o‘zgaruvchi sifatida uzatadi:
throw file_open_error(source);
throw file_read_error(344);
Istisno xolatga ishlov berishda bu parametrlar sinfga tegishli o‘zgaruvchilarga o‘zlashtirilishi mumkin (konstruktorga o‘xshaydi). Masalan, sinfning tegishli o‘zgaruvchisiga xatoga yo‘l qo‘ygan faylni ismini o‘zlashtirish uchun quyidagi operatorlar file_open_error istisno xolatni o‘zgartiradi:
class file_open_error
{
public: file_open_error(char *filename)
{
strcpy(file_open_error::filename, filename);
}
char filename[255] ;
};

5.6. Istisno xolatlar va sinflar
Sinf yaratishda shu sinfga tegishli istisno xolatlarni aniqlash mumkin. Aniq sinfga tegishli istisno xolatni yaratish uchun ushbu istisno xolatni sinfning umumiy (public) elementlari sifatida kiritish zarur.
Masalan diapazon chegarasidan chiquvchi indeks qiymatini bilish zarur bo‘lsin:
class Vector {
// ...
public:
class Range {
public:
int index;
Range(int i) : index(i) { }
};
// ...
int& operator[](int i)
// ...
};
int Vector::operator[](int i)
{
if (o<=i && i throw Range(i);
}
Mumkin bo‘lmagan indeks qiymatini bilish uchun istisno xolatni tasvirlovchi obyektga nom berish kerak:
void f(Vector& v)
103
{
// ...
try {
do_something(v);
}
catch (Vector::Range r ) {
cerr << "mumkin bo‘lmagan indeks" << r.index << '\n';
// ...
}
// ...
}
Qavsdagi konstruksiya tavsif bo‘lib funksiya formal parametriga mosdir. Unda parametr tipi va yuzag kelgn istisno nomi berilishi mumkin.

Download 86.61 Kb.

Do'stlaringiz bilan baham:
1   ...   15   16   17   18   19   20   21   22   23




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