- 1、本文档共32页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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
- 爱心教育读书心得 .pdf
- 每日三问题库(变电公共部分)2008 .pdf
- 江苏省上冈高级中学2007—2008学年度第一学期期一考试高一语文(试验.pdf
- 江西省上饶县中学2024_2025学年高一地理下学期第一次月考试题统招班.pdf
- 河北省唐山市第十二中学2023-2024学年九年级上学期月考数学试题.pdf
- 柴油发电机房安全管理制度及操作规程(4篇) .pdf
- 江苏省南京市玄武外国语学校2021-2022学年八年级数学第二学期期末检测模.pdf
- 江苏省南京市三年(2020-2022)小升初真题汇编04作文(试题)部编版语文六.pdf
- 江苏省扬州市部分区、县2024届中考冲刺卷物理试题含解析 .pdf
- 民宿运营管理的实施方案范例三篇(最新) .pdf
文档评论(0)