C++异的常处理.pptx

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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]; } 在代码中遇到异常状

文档评论(0)

liwenhua00 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档