第12章 异常处理_第1页
第12章 异常处理_第2页
第12章 异常处理_第3页
第12章 异常处理_第4页
第12章 异常处理_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第12章

异常处理

在编写程时,应该试着确定程序可能会出现的错误,然后添加处理错误的代码。例如,当在程序中读写文件时,应测试文件是否打开,读写操作是否成功,并在出现错误时作出正确的处理。随着程序复杂性的增加,为处理可能出的错误而添加的代码的复杂性也会增加。为了更容易处理可能出的错误,C++提供了异常处理机制。需要注意,程序中出的异常并不是代码中的错误。异常只是在程序的运行过程中由于某种特殊的原因导致程序无法正常运行,而代码中的错误则使程序代码无法正常编译并执行。另一方面,在程序中出现的逻辑错误则更致命,由于代码是正确的,因此编译器无法帮我们找到错误,异常处理对此也不很好地解决。异常的概念C++的异常处理结构在函数中抛出异常C++标准异常MFC的异常处理

12.1异常的概念

程序的错误可以分为两种,一种是编译错误,即代码中存在错误。如使用了错误的语法、函数和类,这类错误在编译时可以发现。另一种是运行错误,它又分为不可预料的逻辑错误和可预料的运行异常。逻辑错误是由于程序的设计不当造成的,如排序算法不合理,导致无法完成正常的排序功能。这类错误一般很难发现,只有当用户作出了某此出乎意料的事情时发生,这就人们常话的“漏洞”。这是在设计程序是应该尽量避免的,在工程化的软件开发过程中,人们往往会设计各种测试方法找出程序中可能存在的漏洞。运行异常是可以预料的,但不能避免,它是由系统运行环境造成的。如内存不足,磁盘空间已满,打印机卡纸等。这些可能发生的情况使程序变得很脆弱。因为这些错误是能预料的,通常会加入一些异常处理代码防止这些异常影响到整个程序的运行。

12.2捕获异常

C++的异常处理机制由try、catch和throw语句组成。try-catch块捕获所有的异常

12.2.1try-catch块

为了捕获异常,需要使用try-catch语句。可以在try块内放置一段可能发生异常的程序。紧跟在try程序块后面,应包含一个或多个catch子句来指定想要捕获的异常类型。一种简单的try-catch语句的形式如下:try{//可能抛出异常的代码

……}catch(异常类型e){//某种类型的异常的处理代码

……}catch(异常类型e){//某种类型的异常的处理代码

……}在建立了try-catch块之后,如果在try块中的任何地方抛出在catch子句中指定类型的异常,则程序将跳过异常抛出处之后的代码,而直接跳到catch子句中的异常处理代码处开始执行异常处理。

12.2.2捕获所有的异常

对于catch块,可以用省略号为参数,表示该块应处理所有的异常:catch(...){ //处理所有异常的代码}这个catch块可以处理任何类型的异常,像这样的处理程序必须放在最后。在这种异常处理方式中无法得知异常的类型,但是可以防止程序因为未捕获异常而中断。12.3抛出异常的函数

在函数中可以抛出在调用函数中捕获的异常。当然,也可以在函数内也可以包含自己的try块来处理自己的异常。在默认情况下,函数可以抛出任何类型的异常。这就需要在调用函数的try块后使用带省略号的catch块,以捕获函数可能抛出的所有异常。在函数头中可以添加异常说明,指定函数可能抛出的异常集。异常说明限制了函数可以抛出的异常类型。如果函数有异常说明,就必须在函数声明和函数定义中列出它们。

12.4标准异常类

C++标准库定义了一组异常类,它们都派生于std::exception类,而异常类exception的定义在标准库头文件<excepion>中。exception类包含一个默认的构造函数和复制构造函数、复制赋值运算符和虚函数what(),该函数返回一个描述异常的非空字符串。这些函数都不会抛出异常。

12.5MFC异常在VisualC++2008中进行MFC编程时,可以使用两种异常处理机制:C++标准异常MFC异常宏如果使用MFC编写新的应用程序,则应使用C++机制。如果现有应用程序已经大量使用MFC异常宏,则仍可以使用该机制。MFC异常宏包括:TRY、CATCH、THROW等,它们分别与C++异常处理关

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论