⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 21-6.txt

📁 《C/C++完美演绎》源代码
💻 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 + -