📄 21-6.txt
字号:
/* 范例:21-6 try...catch...__finally */
#include <iostream.h>
#include <string.h>
#include <windows.h>
class Exception
{
public:
Exception(char* s = "Unknown"){ what = strdup(s); }
Exception(const Exception& e ){ what = strdup(e.what); }
~Exception(){ free(what); }
char* msg() const { return what; }
private:
char* what;
};
int main()
{
float e, f, g;
try
{
try
{
f = 1.0;
g = 0.0;
try
{
e = f / g;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
throw(Exception("Can't Divide by 0"));
}
}
catch(const Exception& e)
{
cout << "捉住一个C++例外" << '\n' << e.msg() << endl;
}
}
__finally
{
puts("即使处理完try区块中的例外,仍会执行__finally区块");
}
getchar();
return 0;
}
程序执行结果﹕
project p21-6.exe raised exception class EZeroDivide with message 'Floating point division by zero'. Process stopped. Use Step or Run to continue
除以0时会产生无限大的整数,这是在logic_error(逻辑错误) 中的out_of_range error,请读者特别注意,看到这信息后再编译一次就可以看到你所输入的注释,如下。
捉住一个C++例外
Can't Divide by 0
即使处理完try区块中的例外,仍会执行__finally区块
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -