通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
资源搜索:
热门搜索:Linux VB C语言 PhotoShop Flash TCP/IP
   首页 | 文章 | 软件 | 动画 | 资源 | 励志 | 骗术 | 论坛 | 邮箱 | 会员中心 | 军事 | 科技 | 博客 | 图片 | 商城 | 最新更新 | 800g资源 | 爱心黑客
您现在的位置: 爱国者黑客 >> 资源 >> 程序设计 >> C#语言 >> 基础教程 >> 文章正文

C++ 异常处理 B
责任编辑:admin   更新日期:2005-8-6
8.1.5 处理异常
异常处理程序由紧接在try-block之后的catch关键字确定。关键字catch也可紧接在其他catch块之后。程序发送的每个异常都必须被异常处理程序捕捉和处理。当异常的类型与catch的条件语句中的类型匹配(或可转换)时,异常被处理程序捕捉。一旦类型匹配成立,程序控制转到处理程序且栈被打开。

处理程序确定处理程序不正常状态的操作。
处理程序执行完毕后,程序会在当前的try-block中发送异常的那个处理程序后继续运行。其他处理程序不会对当前异常做出反映。goto语句可用于将程序控制跳出一个处理程序。若程序提供异常处理程序失败,程序终止。

注意 这些例子通过命令行使用bcc32.exe可成功地编译并运行,而不需使用IDE。
例1:


例2:下例说明当捕捉到的异常是类层次结构的一部分,则需从最末的派生类开始。


例3:下例中,catch(...)块可处理任何类型的异常。这个块也是try-block中唯一的处理程序。


8.1.6 异常规范
C++提供一种名为exceptionspecification的特性可将一个函数可能发送的异常在声明中列出。exceptionspecification使用时类似于函数声明的后缀,句法如下:


这样的函数后缀不是函数类型的一部分。因此,指向函数的指针不会受exceptionspecification的影响。像这样的指针只检查函数返回值和参数类型。因此,下列声明是合法的:


当重载虚拟函数时需要小心。因为exceptionspecification不是函数类型的一部分,所以可能会破坏程序设计。
例1:在下例中,定义的派生类BETA::vfunc不发送任何异常,这偏离了原始的函数声明。


下例是带有异常规范的函数。

这样的函数的定义和所有的声明必须有一个包含相同的type-ids集的异常规范。若函数发送一个规范中未列出的异常,程序会调用unexpected。

8.1.7 异常处理的构造和析构
若不能成功地构造一个对象,类构造函数会发送异常。当按值发送对象且异常被引发时,拷贝构造函数被调用。拷贝构造函数在发送点初始化一个临时对象。应用程序也可产生另外的拷贝。

如果构造函数发送了异常,对象的析构函数就不需要被调用。析构函数仅为基类和那些在try-block中构造成功的对象调用。为try-block中构造的throw语句后的对象调用析构函数的进程称为stackunwinding。若析构函数在这个进程中引发一个异常且没有处理,则terminate被调用。析构函数是缺省调用的,不过可通过使用-xd-编译器选项关闭缺省设置。

8.1.8 未处理的异常
如果一个异常被发送但没有发现事件处理程序,程序调用terminate函数。下例说明了程序中出现未处理的异常时如何处理。


8.1.9 设置异常处理选项
表8-1是C++Builder编译器的异常处理选项。
点击放大
 
  • 上一篇文章:
  • 下一篇文章:
  • 热门文章
    Olldbg常见问题
    汇编语言的艺术(组合语言的艺术)--观
    汇编语言的艺术(组合语言的艺术)--准
    汇编语言的艺术(组合语言的艺术)--基
    汇编语言的艺术(组合语言的艺术)--基
    汇编语言---程式设计 (4)
    虚拟8086模式
    SYS命令使用说明
    javascript + CSS 实现动态菜单显
    推荐文章
    自制Windows XP SP2自动安装光盘
    SQLServer注入工具改进版 v1.02
    使用photoshop CS进行自然美肤
    Photoshop绘制诺基亚手机
    PHOTOSHOP制作秋日之梦
    PHOTOSHOP鼠绘名模王爱萍
    Photoshop制作晶莹飞溅的水珠
    教你用PHOTOSHOP做放大镜
    鼠绘美女及服装修画全过程