Write a program that illustrates rethrowing an exception. 定义runtime_error的派生类TestException class TestException : public runtime_error{…}; 定义一个函数g(),其中try语句块中抛出TestException异常,在可以处理任何类型异常的catch语句块部分打印并重新抛出异常。 在main函数中的try语句块部分调用g()函数,并在catch语句块中打印。
时间: 2024-02-13 21:04:18 浏览: 61
单片机实例1-12.doc
根据C++的异常处理机制,当一个异常被抛出时,程序会在当前的try-catch块中查找能够处理该异常的catch块。如果找到了对应的catch块,则执行该catch块中的代码,并结束异常处理过程。如果在当前的try-catch块中没有找到能够处理该异常的catch块,则该异常会被传递给上一层的try-catch块继续处理。
在某些情况下,我们希望在异常处理过程中重新抛出异常,使得异常能够被更高层次的异常处理机制处理。这种情况下,我们可以使用rethrow机制,即在catch块中使用throw语句重新抛出异常。
下面是一个示例程序,演示了rethrow机制的使用。程序定义了一个TestException类,它是从runtime_error类派生而来的。程序还定义了一个函数g(),其中在try语句块中抛出TestException异常,在可以处理任何类型异常的catch语句块部分打印并重新抛出异常。在main函数中的try语句块部分调用g()函数,并在catch语句块中打印。
```c++
#include <iostream>
#include <stdexcept>
using namespace std;
class TestException : public runtime_error
{
public:
TestException(const string& message) : runtime_error(message) {}
};
void g()
{
try
{
throw TestException("Test exception");
}
catch (const exception& e)
{
cerr << "Caught exception: " << e.what() << endl;
throw; // re-throw the same exception
}
}
int main()
{
try
{
g();
}
catch (const exception& e)
{
cerr << "Caught exception: " << e.what() << endl;
}
return 0;
}
```
运行上述程序,可以看到程序先在g()函数中抛出TestException异常,然后在catch块中重新抛出该异常。该异常被传递给调用g()函数的地方,最终在main函数的catch块中被捕获并处理。程序输出捕获的异常信息,然后终止。
阅读全文