- 1、本文档共32页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C异的常处理
第09章异常处理
-2-
本章内容安排
程序中的错误及处理
异常机制
多态异常处理
-3-
程序中的各种错误
编写健壮、没有Bug的程序是软件开发的首要任务,实际软件开发中,花费最大的是测试、发现和修复Bug。预测和处理错误占据了大多数代码。
发现问题的时间越晚,修复所需付出的代价越高。
尽量避免产生错误;
编译器发现的语法错误;
通过编译的Bug,首次测试被发现;
偶尔出现的Bug(更难被发现修复);
程序的脆弱性(异常输入、内存不足等)。
-4-
不同类型的Bug
Bug:程序员犯错引起的程序功能错误;
逻辑错误:由于程序员对问题以及解决方案的误解所引起的;
异常:由于不常见但可预见的问题(如内存不足或磁盘空间耗尽)引起的。
-5-
处理意外情况
通过设计审核和详尽测试来发现逻辑错误。
我们无法消除异常,只能为各种可能的异常情况提前做好准备(如内存不足、磁盘空间不足)。
出现异常时有以下的处理方式
崩溃
通知用户并妥善退出
通知用户,让用户尝试恢复并继续执行
采取措施,在不影响用户的情况下继续运行
很难做到从所有异常情况下恢复正常,但最起码不能让
程序直接崩溃。
-6-
本章内容安排
程序中的错误及处理
异常机制
多态异常处理
-7-
什么是异常
异常是一段代码遇到异常状态后,通知另一段代码(异常处理代码)并进行处置的机制。
遇到错误的代码抛出(throw)异常
处理异常的代码捕获(catch)异常
异常的处理流程不遵守常规的代码执行流程,代码抛出异常后,立即停止执行,跳转到异常处理处。
C++异常机制
C++使用try、throw、catch语句实现异常机制。
通常创建try块包围有可能出问题的代码区
try
{
someDangerousfunction();
}
创建若干catch块(通常位于try块之后),对不同的异常进行处理,不同catch块处理不同异常。
在处理代码中,遇到异常情况时,通过throw抛出异常。
-8-
-9-
抛出异常
double divide( double x, double y)
{
if(y==0)
throw y;
return x/y;
}
遇到异常状态时,通过throw抛出异常,异常可以是一个
常量、变量、表达式或类对象。
抛出异常后,不再执行throw后面的语句,立即跳转到类型
匹配的处理块中。如果没有找到匹配的处理块,由系统处
理,通常是终止程序的执行。
捕获异常的模块,通过抛出异常的类型进行匹配。
-10-
处理异常
#include iostream
int main()
{
try
{
std::coutdivide(5,2)std::endl;
std::coutdivide(8,0)std::endl;
std::coutdivide(7,1)std::endl;
}
catch( double )
{
std::coutexcept of deviding zero.\n;
}
std::coutthat is ok.\n;
return 0;
}
divide函数中抛出double类型异常,
直接跳转到catch处理块。
-11-
定义异常类
class XBoundary
{
public:
XBoundary() {}
~XBoundary() {}
private:
};
在代码中遇到异常状态时,可以抛出自定义的异常类对象,
通常会在异常类中保存异常信息,示例中做了简化。
-12-
简化的Array类
class Array
{
public:
Array(int newSize);
Array(int *p,int size);
~Array();
Array(const Array a);
Array operator=(const Array a);
int operator[](int offset);
const int operator[](int offset)const;
int getSize()const;
int max()const;
void reverse();
void output()const;
private:
int *pData;
int size;
};
-13-
抛出异常类对象
int Array::operator[](int offset)
{
int size=getSize();
if(offset=0 offsetsize)
return pType[offset];
throw XBoundary();
return pType[offset];
}
在代码中遇到异常状
您可能关注的文档
- Av的alon总线规范.ppt
- AutoCAD 的2009机械绘图教案.doc
- Axure的-RP产品经理入门到精通培训简易教程.pdf
- axur的e教程.docx
- AX的D调试以及使用方法.ppt
- A型肉毒毒素局部的注射技术申报书.pdf
- Avantage_-_定量分析与的数据处理方法.pdf
- A的2O调试方案.doc
- AX的I4-协议规范.ppt
- Avaya视的频会议方案.pptx
- 场地脚手架工程施工方案(3篇).docx
- 2024年浙江省丽水市松阳县玉岩镇招聘社区工作者真题及参考答案详解一套.docx
- 2024年河南省郑州市惠济区古荥镇招聘社区工作者真题及答案详解一套.docx
- 2024年浙江省杭州市淳安县文昌镇招聘社区工作者真题及完整答案详解1套.docx
- 2024年浙江省台州市三门县小雄镇招聘社区工作者真题带答案详解.docx
- 2024年浙江省宁波市余姚市河姆渡镇招聘社区工作者真题及完整答案详解1套.docx
- 2024年浙江省丽水市景宁畲族自治县雁溪乡招聘社区工作者真题及答案详解一套.docx
- 2024年浙江省杭州市临安市板桥乡招聘社区工作者真题及答案详解一套.docx
- 2024年湖北省宜昌市点军区土城乡招聘社区工作者真题及答案详解一套.docx
- 2024年浙江省台州市路桥区桐屿街道招聘社区工作者真题附答案详解.docx
最近下载
- 煤矿一通三防PPT课件.pptx VIP
- 误吸预防与护理课件(1).pptx VIP
- 深圳清华实验学校语文新初一分班试卷.doc VIP
- 系列电动缸内容简介2特点规格产品手册18942et.pdf VIP
- 风湿免疫学课件.pptx VIP
- JVC摄像机EX-A10UF用户手册.pdf
- 高中数学 第一章 常用逻辑用语 1.3 充分条件、必要条件与命题的四种形式 1.3.1 推出与充分条件、必要条件课件 新人教B版选修1-1课件.ppt VIP
- 深圳清华实验学校新初一分班语文试卷.doc VIP
- 心肺复苏操作培训课件.ppt VIP
- 2025年高考复习之小题狂练(语言文字运用):语用2(30题).doc VIP
文档评论(0)