【发布时间】:2018-03-15 19:27:13
【问题描述】:
给定一个类Stack(例如):
class Stack {
// ...
class Exception : public std::exception {};
class Full : public Exception {};
class Empty : public Exception {};
};
让我们看看下一个函数f(例如):
void f() {
try {
Stack s(100); // Only for the example.
} catch (Stack::Full& e) {
cerr << "Not enough room";
} catch (Stack::Exception& e) {
cerr << "Error with stack";
} catch (std::exception& e) {
cerr << e.what() << endl;
}
}
如果它转到最后一个catch,输出会是什么?
我需要在 Exception 类中声明 what() 函数才能正常工作?
【问题讨论】:
-
你应该扔东西,否则什么都抓不到。
-
@liliscent:你怎么知道
Stack s(100);不扔? -
@VittorioRomeo 基于发布的代码。
-
@VittorioRomeo 我不是,但我的问题是关于
what()函数,e.what()的输出是什么? -
what是std::exception类的虚拟方法,您可以在异常类中重写它以提供您想要的任何文本。这就是派生自std::exception的异常类通常会做的事情。
标签: c++ exception polymorphism virtual-functions