- 1、本文档共40页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
异常捕获 一个函数抛出异常,它必须假定该异常能被捕获和处理。异常捕获机制使得C++可以把问题集中在一处解决。 catch捕获异常 异常处理器放在catch块中, 形式如下: catch ( 捕获的异常类型 可选参数 ) { 异常处理器代码 } catch处理器定义自己的范围。catch在括号中指定要捕获的对象类型。catch处理器中的参数可以命名也可以无名。如果是命名参数,则可以在处理器中引用这个参数。 如果是无名参数(只指定匹配抛出对象类型的类型),则信息不从抛出点传递到处理器中,只是控制从抛出点转到处理器中.许多异常都可以这样。 catch (…) 捕获任意类型的异常。 异常捕获原理 如果一个异常信号被抛出,异常处理器中第一个参数与异常抛出对象相匹配的函数将捕获该异常信号,然后进入相应的catch语句,执行异常处理程序。 捕获异常的匹配规则 匹配条件:下列情况下,catch处理器参数匹配所抛出对象的类型:??? 1、 实际是同一类型。??? 2、catch处理器参数类型是所抛出对象类型的public基类。???3、 处理器参数为基类指针或引用类型,而抛出对象为派生类指针或引用类型。???4、catch处理器为catch(...),捕获任意类型的异常。 捕获异常的匹配规则(续) 匹配结果:抛出异常对象类型与catch处理器参数类型相符时,则两者相匹配, 程序将执行该类型的catch块(即该类型的异常处理器)。 匹配顺序:catch中在当前活动try块后面第一个匹配所抛出异常对象的异常处理器将捕获该异常。按顺序有哪些信誉好的足球投注网站异常处理器,寻找匹配项,并执行第一个匹配的处理器。处理器执行完毕时,控制恢复到最后一个catch块后面的第一条语句。 捕获异常的匹配规则(续) 无匹配情况:若某个抛出对象没有任何匹配的异常处理器,这时匹配有哪些信誉好的足球投注网站会继续到外面一层try块。这个过程一直继续,若最终还是没有任何匹配的异常处理器。这时调用terminate(默认调用abort)终止程序。 多匹配情况:若几个异常处理器都匹配所抛出的对象,这可能有几个原因: 第一,有一个捕获任何异常的catch(…)处理器。 第二,由于继承层次,派生类对象可以由派生类类型的异常处理器和基类类型的异常处理器捕获。 这时执行第一个匹配的异常处理器。 捕获异常的匹配规则(续) catch(...)总是作为try块后面的处理器列表中最后一个处理器。 捕获基类类型的异常处理器放在捕获派生类类型的异常处理器之后。 将带void *参数类型的异常处理器放在具有其他指针类型的异常处理器后面。 除零异常的捕获 int main() { int number1, number2; double result; cout Enter two integers (end-of-file to end): ; while ( cin number1 number2 ) { try { result = Div( number1, number2 ); cout The quotient is: result endl; } catch ( DivideByZeroException ex ) { cout Exception occurred: ex.what() \n‘; } cout \nEnter two integers (end-of-file to end): “; } cout endl; return 0; } Try语句块中包含了可能抛出异常的代码Div,一旦抛出了异常,则退出try语句块,进入try后面的异常捕获和处理 double Div(int x, int y ) { if ( y == 0 ) throw DivideByZeroException(); return static_cast double ( x ) / y; } int main() { int number1, number2; double result; cout Enter two integers (end-of-file to end): ; while ( cin number1 number2 ) { try { if (number2==0) throw DivideByZeroException();
文档评论(0)