Я анализирую часть кода, которая была частью моих лекций.Мне удалось скомпилировать его, но я не могу понять: почему моя программа выводит «Wyjatek» и 0 вместо «WyjatekNieoznaczony»?
Я был почти уверен, что WyjatekNieoznaczony () должен быть брошен, потому что a = 0 и b =0 так же.Прямо сейчас я немного смущен.Не могли бы вы помочь мне, пожалуйста?
class Wyjatek {};
class WyjatekBledny : public Wyjatek {};
class WyjatekNieoznaczony : public Wyjatek {};
double f(double a, double b) {
if (b == 0) {
if (a == 0)
throw WyjatekNieoznaczony();
else
throw WyjatekBledny();
}
return a / b;
}
double g(double a, double b) throw (int) {
try {
return f(a, b);
}
catch (WyjatekBledny) {
cout << "Wyjatek bledny" << endl;
throw 1;
}
catch (Wyjatek) {
cout << "Wyjatek" << endl;
}
catch (WyjatekNieoznaczony) {
cout << "Wyjatek nieoznaczony" << endl;
throw;
}
return 0;
}
int main()
{
double a = 0, b = 0;
try {
cout << g(a, b) << endl;
}
catch (...)
{
cout << "Inny wyjatek" << endl;
}
system("pause");
return 0;
}