【发布时间】:2019-07-01 12:07:59
【问题描述】:
我正在分析我讲座中的部分代码。 我设法编译它,但我无法理解: 为什么我的程序输出“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;
}
【问题讨论】:
-
catch语句从上到下工作。如果给定的catch可以捕获异常,那么它将被捕获,其余的将被忽略。因为WyjątekNieoznaczony也是Wyjatek,所以只会执行第二个catch。我正在寻找这个的副本。 -
我能找到的最接近你的问题stackoverflow.com/questions/29731033/…
-
附注:用英语编码是一种很好的做法。稍后它将对您有很大帮助,例如,当您需要在 StackOverflow 上提出另一个问题时。不是我们所有人都懂波兰语;)
-
请在您的帖子中添加适当的缩进,以便我们可以轻松地遵循您的代码。