欢迎来到天天文库
浏览记录
ID:50318774
大小:1.47 MB
页数:22页
时间:2020-03-08
《C++教程教学课件 作者 郑莉 李宁 12_容错及异常处理基础.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十二章容错及异常处理基础清华大学郑莉学习目标掌握异常的抛出和捕获方法;掌握异常对象的声明方式;了解异常的接口声明和异常规范的使用。2目录12.1异常处理的基本思想12.2抛出异常12.3捕获异常12.4异常对象12.5标准程序库异常处理12.6异常规范4.2.1数据在内存中的地址4.2.2指针及指针运算312.1异常处理的基本思想程序运行中的有些错误是可以预料的,例如发生诸如除数为零、内存申请不成功、硬盘文件被移动或者被损坏等的情况。程序在运行到发生异常之时,应该对所发生的情况做相关的工作之后再退出,把当前控制权交给上一级的函数。C+
2、+语言提供对处理异常情况的支持。try、throw和catch语句就是C++语言中用于实现异常处理的机制。412.2抛出异常抛出异常throw表达式的语法为:throw表达式如果某段程序中发现了自己不能处理的异常,就可以使用throw表达式抛掷这个异常,将它抛掷给调用者。throw的操作数表示异常类型,语法上与return语句的操作数相似,如果程序中有多处要抛掷异常,应该用不同的操作数类型来互相区别,操作数的值不能用来区别不同的异常。5例12-1:处理函数中除数为零的异常(简单异常处理函数)#includeusing
3、namespacestd;intDivide(intx,inty){if(y==0)throwy;returnx/y;}intmain(){try{cout<<“5/2=”<4、12-1(续)12.2抛出异常7例12-2:异常处理类中除数为零的异常(抛出异常类)#includeusingnamespacestd;classZeroExcep{public:ZeroExcep():message(“Errorbydividingzero!”){}//除零异常constchar*GetMessage(){returnmessage;}private:constchar*message;};doubledivide(intnum,intdenum){if(denum==0)throwZeroExc5、ep();//抛出异常returnstatic_cast(num)/denum;}812.2抛出异常例12-2(续)voidmain(){intnum1,num2;cout<<“Pleaseinputtwointergers:”;while(cin>>num1>>num2){try{cout<<”Theresultis:”<6、异常cout<<”Inputtwointergers:”;}}912.2抛出异常运行结果:Pleaseinputtwointergers:74Thequotientis:1.75Pleaseinputtwointergers:100Exceptionis:Errorbydividingzero!例12-2(续)12.2抛出异常1012.3捕获异常当异常被抛掷以后,catch子句便依次被检查,若某个catch子句的异常类型声明与被抛掷的异常类型一致,则执行该段异常处理程序。如果异常类型声明是一个省略号(…),catch子句便处理任何类型的7、异常,但这段处理程序必须是try块的最后一段处理程序。try-catch块的语法如下try复合语句catch(异常类型声明)复合语句catch(异常类型声明)复合语句11例12-3:求给定数的平方根(捕获负数异常)intmain(){intx;while(true){cout<<“Pleaseinputapositiveinterger:”;cin>>x;try{cout<8、rn0;}1212.3捕获异常运行结果:Pleaseinputapositiveinterger:82.82843Pleaseinputapositiveinterger:-2Itisanegativein
4、12-1(续)12.2抛出异常7例12-2:异常处理类中除数为零的异常(抛出异常类)#includeusingnamespacestd;classZeroExcep{public:ZeroExcep():message(“Errorbydividingzero!”){}//除零异常constchar*GetMessage(){returnmessage;}private:constchar*message;};doubledivide(intnum,intdenum){if(denum==0)throwZeroExc
5、ep();//抛出异常returnstatic_cast(num)/denum;}812.2抛出异常例12-2(续)voidmain(){intnum1,num2;cout<<“Pleaseinputtwointergers:”;while(cin>>num1>>num2){try{cout<<”Theresultis:”<6、异常cout<<”Inputtwointergers:”;}}912.2抛出异常运行结果:Pleaseinputtwointergers:74Thequotientis:1.75Pleaseinputtwointergers:100Exceptionis:Errorbydividingzero!例12-2(续)12.2抛出异常1012.3捕获异常当异常被抛掷以后,catch子句便依次被检查,若某个catch子句的异常类型声明与被抛掷的异常类型一致,则执行该段异常处理程序。如果异常类型声明是一个省略号(…),catch子句便处理任何类型的7、异常,但这段处理程序必须是try块的最后一段处理程序。try-catch块的语法如下try复合语句catch(异常类型声明)复合语句catch(异常类型声明)复合语句11例12-3:求给定数的平方根(捕获负数异常)intmain(){intx;while(true){cout<<“Pleaseinputapositiveinterger:”;cin>>x;try{cout<8、rn0;}1212.3捕获异常运行结果:Pleaseinputapositiveinterger:82.82843Pleaseinputapositiveinterger:-2Itisanegativein
6、异常cout<<”Inputtwointergers:”;}}912.2抛出异常运行结果:Pleaseinputtwointergers:74Thequotientis:1.75Pleaseinputtwointergers:100Exceptionis:Errorbydividingzero!例12-2(续)12.2抛出异常1012.3捕获异常当异常被抛掷以后,catch子句便依次被检查,若某个catch子句的异常类型声明与被抛掷的异常类型一致,则执行该段异常处理程序。如果异常类型声明是一个省略号(…),catch子句便处理任何类型的
7、异常,但这段处理程序必须是try块的最后一段处理程序。try-catch块的语法如下try复合语句catch(异常类型声明)复合语句catch(异常类型声明)复合语句11例12-3:求给定数的平方根(捕获负数异常)intmain(){intx;while(true){cout<<“Pleaseinputapositiveinterger:”;cin>>x;try{cout<8、rn0;}1212.3捕获异常运行结果:Pleaseinputapositiveinterger:82.82843Pleaseinputapositiveinterger:-2Itisanegativein
8、rn0;}1212.3捕获异常运行结果:Pleaseinputapositiveinterger:82.82843Pleaseinputapositiveinterger:-2Itisanegativein
此文档下载收益归作者所有