设为首页 加入收藏

TOP

15.3.3 异常机制(2)
2013-10-07 15:43:51 来源: 作者: 【 】 浏览:72
Tags:15.3.3 异常 机制

15.3.3  异常机制(2)

其中被引发的异常是字符串"bad hmean( )arguments: a = -b not allowed"。异常类型可以是字符串(就像这个例子中那样)或其他C++(www.cppentry.com)类型;通常为类类型,本章后面的示例将说明这一点。

执行throw语句类似于执行返回语句,因为它也将终止函数的执行;但throw不是将控制权返回给调用程序,而是导致程序沿函数调用序列后退,直到找到包含try块的函数。在程序清单15.9中,该函数是调用函数。稍后将有一个沿函数调用序列后退多步的例子。另外,在这个例子中,throw将程序控制权返回给main( )。程序将在main( )中寻找与引发的异常类型匹配的异常处理程序(位于try块的后面)。

处理程序(或catch块)与下面类似:

 

catch块点类似于函数定义,但并不是函数定义。关键字catch表明这是一个处理程序,而char*s则表明该处理程序与字符串异常匹配。s与函数参数定义极其类似,因为匹配的引发将被赋给s。另外,当异常与该处理程序匹配时,程序将执行括号中的代码。

执行完try块中的语句后,如果没有引发任何异常,则程序跳过try块后面的catch块,直接执行处理程序后面的第一条语句。因此处理值3和6时,程序清单15.9中程序执行报告结果的输出语句。

接下来看将10和 10传递给hmean( )函数后发生的情况。If语句导致hmean( )引发异常。这将终止hmean( )的执行。程序向后搜索时发现,hmean( )函数是从main( )中的try块中调用的,因此程序查找与异常类型匹配的catch块。程序中唯一的一个catch块的参数为char*,因此它与引发异常匹配。程序将字符串"bad hmean( )arguments: a = -b not allowed"赋给变量s,然后执行处理程序中的代码。处理程序首先打印s-捕获的异常,然后打印要求用户输入新数据的指示,最后执行continue语句,命令程序跳过while循环的剩余部分,跳到起始位置。continue使程序跳到循环的起始处,这表明处理程序语句是循环的一部分,而catch行是指引程序流程的标签(参见图15.2)。

 
(点击查看大图)图15.2  出现异常时的程序流程
您可能会问,如果函数引发了异常,而没有try块或没有匹配的处理程序时,将会发生什么情况。在默认情况下下,程序最终将调用abort( )函数,但可以修改这种行为。稍后将讨论这个问题。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇15.1.1 友元类(1) 下一篇15.3.3 异常机制(1)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何利用Python做数 (2025-12-24 23:48:36)
·如何使用python进行 (2025-12-24 23:48:34)
·python 爬虫入门该怎 (2025-12-24 23:48:31)
·Java 实现多个大文件 (2025-12-24 23:22:00)
·Java多线程编程在工 (2025-12-24 23:21:56)