已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 十二 章 容错及异常处理基础学习目标 掌握异常的抛出和捕获方法; 掌握异常对象的声明方式; 了解异常的接口声明和异常规范的使用。2目录12.1 异常处理的基本思想12.2 抛出异常12.3 捕获异常12.4 异常对象12.5 标准程序库异常处理12.6 异常规范4.2.1 数据在内存中的地址4.2.2 指针及指针运算312.1异常处理的基本思想 程序运行中的有些错误是可以预料的,例如发生诸如除数为零、内存申请不成功、硬盘文件被移动或者被损坏等的情况。程序在运行到发生异常之时,应该对所发生的情况做相关的工作之后再退出,把当前控制权交给上一级的函数。 C+语言提供对处理异常情况的支持。 try、 throw和 catch语句就是 C+语言中用于实现异常处理的机制。412.2抛出异常 抛出异常 throw表达式的语法为: throw 表达式 如果某段程序中发现了自己不能处理的异常,就可以使用 throw表达式抛掷这个异常,将它抛掷给调用者。 throw的操作数表示异常类型,语法上与 return语句的操作数相似,如果程序中有多处要抛掷异常,应该用不同的操作数类型来互相区别,操作数的值不能用来区别不同的异常。 5例 12-1:处理函数中除数为零的异常(简单异常处理函数)#include using namespace std;int Divide(int x, int y)if (y = 0) throw y;return x/y;int main()trycout using namespace std;class ZeroExceppublic:ZeroExcep (): message (“Error by dividing zero!”) /除零异常const char* GetMessage () return message;private:const char* message;double divide(int num, int denum)if (denum = 0) throw ZeroExcep(); /抛出异常return static_cast(num)/denum;8例 12-2(续)void main ()int num1, num2;cout num1num2)try cout x;try cout using namespace std;int fun(int);static int Array = 1,2,3,4,5;int main()try cout = 5) throw i; return Arrayi;14例 12-4(续)运行结果:Array1 = 2Subscription is out of range15例 12-5:使用多个 catch语句#include using namespace std;void MultiCatch(int test)try if (test) throw test;else throw “Value is zero”;catch(int i) cout (num)/denum;此时,如果发生异常,程序抛出的也只一个 ZeroExcep对象,并且用全局对象 ex来初始化该对象。而并不是将全局对象抛出。1812.5标准程序库异常处理 C+标准提供了标准异常层次,这个层次以基类 exception开始,标准程序库抛出的所有异常处理都派生自该基类,这些类构成如下图。 19例 12-6:处理 new失败时的bad_alloc异常#include #include using namespace std;int main()double* pArray10;tryfor(int i=0; i10; i+)pArrayi = new double80000000;cout “Allocated 80000000 doubles in pArray”i”n”;catch (bad_alloc ”memoryAllocationException.what()endl;return 0;20例 12-6(续)运行结果:Allocated 80000000 doubles in pArray0Allocated 80000000 doubles in pArray1Exception occurred; Allocation Failure21小结本章我们介绍了使用 throw语句抛出异常对象,使用 try-catch语句捕获异常对象,从而
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年公共安全视频监控服务合同协议
- 2025年工业自动化生产线合作协议
- 神经内科帕金森病综合治疗措施指南
- 2025年工业园区电力检测合同协议
- 导游证训练试题及答案
- 20254s店会计试题及答案
- 2025自考会计面试题目及答案
- 老人智能手环可行性研究报告
- 2025年税务师考试题库及答案(历年真题)
- 国企劳务派遣考核制度范本
- 妇科宫颈疾病课件
- 土地承包与租赁合同范本
- 护士礼仪培训
- 新疆农业大学《数学》2024-2025学年第一学期期末试卷
- 中学作业管理制度及监督执行方案
- 医院管路护理新发展课件
- 2025年年产10万吨饮料生产线新建建设项目可行性研究报告
- 学堂在线 军事历史-第二次世界大战史 章节测试答案
- 人工智能学习汇报
- 二维半导体材料及其异质结:生长、性能与光电子应用的深度剖析
- 6.3 三位数除以一位数(首位够除)(课件)苏教版数学三年级上册
评论
0/150
提交评论