#include
class Tayanch
{
};
class Hosila: public Tayanch
{
};
void Fun_Hosila_Istisnosi()
{
Hosila hosila;
throw hosila;
}
void Fun_Istisno()
{
throw "Fun_Istisno() funksiyasida xato!\n";
}
int main()
{
try
{
Fun_Hosila_Istisnosi();
}
catch (Hosila &)
{
cout<<"Hosila& istisnosi ilib olindi!\n";
}
catch (Tayanch &)
{
cout<<"Tayanch& istisnosi ilib olindi!\n";
}
try
{
Fun_Istisno();
}
catch (const char * s)
{
cout<<"const char * istisnosi ilib olindi!\n";
cout<<"Istisno manzili: "<
}
catch (void *)
{
cout<<"void* istisnosi ilib olindi!\n";
}
return 0;
}
Программа ишлаши натижасида экранга қуйидаги сатрлар чиқади:
Hosila& istisnosi ilib olindi!
const char * istisnosi ilib olindi!
Istisno manzili: Fun_Istisno() funksiyasida xato!
Агар программада catch(Tayanch&) блоки catch(Hosila&) блокидан олдин ёзилса, у Hosila синфи туридаги қайта ишловчисини яширади ва шу турдаги истиснони ўзи илиб олади. Худди шундай, catch(void*) блоки catch(const char *s) блокдан олдин келса, кўрсаткич туридаги барча истисноларни илиб олади, хусусан, const char* туридаги истиснони ҳам. Юқоридаги программада бундай ўрин алмаштиришлар қилинса, экранга
Tayanch& istisnosi ilib olindi!
void* istisnosi ilib olindi!
хабарлари чоп этилади.
Ичма-ич жойлашган try-catch блоклар
С++ тили ичма-ич жойлашган try-catch блокларни ишлатишга имкон беради. Бундай кўринишлар учун ягона талаб – ҳар бир try-блокдан кейин албатта catch-блок келиши керак.
Мисол:
#include
Do'stlaringiz bilan baham: |