理论教育 C++中异常处理机制的检查和控制|《面向对象程序设计》

C++中异常处理机制的检查和控制|《面向对象程序设计》

时间:2023-10-25 理论教育 版权反馈
【摘要】:在C++中程序采用异常处理机制对异常进行检查和控制,即采用try-throw-catch语句对异常进行检测、捕获和处理,那么对于例9.1中的除数为0,这样的异常该如何检查和控制呢?C++中异常处理机制是首先对可能出现异常的程序段进行检测,当运行出现异常时,抛出异常,通知系统异常发生,然后系统捕获异常,最后在异常处理段对异常进行处理。这种异常处理机制可以用异常处理语句实现,异常处理的语法如下。

C++中异常处理机制的检查和控制|《面向对象程序设计》

在C++中程序采用异常处理机制对异常进行检查和控制,即采用try-throw-catch语句对异常进行检测、捕获和处理,那么对于例9.1中的除数为0,这样的异常该如何检查和控制呢?

C++中异常处理机制是首先对可能出现异常的程序段进行检测,当运行出现异常时,抛出异常,通知系统异常发生,然后系统捕获异常,最后在异常处理段对异常进行处理。这种异常处理机制可以用异常处理语句实现,异常处理的语法如下。

try程序块是对可能出现异常的程序段进行检测,如果检测到异常,就抛出(throw)异常,不再执行“其他语句”,跳到捕获异常catch程序块去执行。被抛出的异常可以用数值、字符串,甚至是对象等表示。如果没有检测到异常,则执行语句块中的“其他语句”,然后跳过catch语句块执行其后的语句。try块内可以检查多种异常,会抛出多种类型的异常。catch语句块作用是捕获异常和对异常进行处理,catch后的异常形参类型要和throw 抛出的异常类型一致,所以可以有多个catch语句,仅捕获与异常参数类型匹配的异常。

try块对异常进行检测,检测到后就会throw 异常,catch语句捕获异常,在catch块内处理异常。

【例9.2】进行除法运算,输入被除数和除数,若除数为0捕获异常并处理,要求程序重新输入被除数和除数,直到除数不为0,输出结果,结束程序。

程序的运行效果如下:

输入被除数和除数:5 0

出现除数为0的异常!

请重新输入!

输入被除数和除数:3 0

出现除数为0的异常!

请重新输入!

输入被除数和除数:5 8

result=0.625

程序运行结束!(www.daowen.com)

程序运行中,前两次输入都是除数为0,都被检测到异常,抛出异常,被catch语句捕获,输出错误的信息“出现除数为0的异常!”,然后执行“goto abc;”语句跳转到标签abc处重新输入,第三次输入除数非0,执行throw 语句后的语句,输出结果后,跳转到catch语句块后,输出“程序运行结束!”。

C++的异常处理中,若函数内可能产生异常,可以不在函数内处理,抛出异常,而在调用函数处检查并捕获异常,对异常进行处理。

【例9.3】设计除法函数,在除数为0时,抛出整型数异常。在main函数中调用除法函数,并对异常进行检测和捕获处理。

程序的运行结果如下:

输入被除数和除数:3 9

result=0.333333

输入被除数和除数:3 0

i=1除数为0的异常!

程序运行结束!

当输入的除数不是0时,程序正常运行,输出计算结果;当输如的除数为0时,在div()函数中抛出异常,在调用函数main函数中检测异常并捕获异常,并在catch 块中处理了异常。

C++中异常处理过程一般如下:当函数内产生异常时,抛出异常,异常的传递是自下而上的,即如果本函数内有捕获异常匹配就处理,如果没有就传递到它的上层(调用函数)处,如果还没有就继续往上抛,直到找出匹配的处理异常的catch语句为止。如果到最外层的catch语句也没有匹配的异常处理块,则系统将自动调用库函数abort()函数,终止程序的运行。

重点提示

抛出的异类型必须与捕的形式参数类完全匹配,才处理异常,不许类型兼容或换,若没有确的匹配类型,统会用abort(函数终止程序运行。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈