二十一天学通C++:异常概述
本人节选自《21天学通C++》一书

简单地说,异常就是程序在运行过程中,由于使用环境的变化及用户的操作而产生的错误。例如,内存不足时,应用程序请求分配内存,程序中出现了以零为除数的错误;打印机未打开,导致程序运行中挂接这些设备失败等,都会引发异常。对这些错误,应用程序如果不能进行合适的处理,将会使程序变得非常脆弱,甚至不可使用。
    因此,对于这些可以预料的错误,在程序设计时,应编制相应的预防代码或处理代码,以便防止异常发生后造成严重后果。一个应用程序,既要保证其正确性,还应有容错能力,或者说,既要在正确的应用环境中,在用户正确操作时,要运行正常、正确,并且在应用环境出现意外或用户操作不当时,也应有合理的反应。
    因此,异常处理对于编写健壮的软件来说无疑是非常重要的,是否有完善的异常处理机制也是评价某一程序设计语言优劣的一个重要标准。
20.1.2  异常处理的基本思想
    事实上,所有的程序设计语言对于异常处理的思想基本上都是类似的。简单地说,就是捕获异常后进行处理。
具体地说,处理异常的基本思想是:在底层发生的问题,逐级上报,直到有能力可以处理异常的那级为止。或者说,在应用程序中,如果某个函数发现了错误并引发异常,这个函数就将该异常向上级调用者传递,请求调用者捕获该异常并处理该错误。如果调用者不能处理该错误,就继续向上级调用者传递,直到异常被捕获错误被处理为止。
如果程序最终没有相应的代码处理该异常,那么该异常最后被C++系统所接受,C++系统就简单地终止程序运行。异常的传递如图20-1所示。
由图20-1读者可以看出,C++异常处理的目的是在异常发生时,尽可能地减少破坏,使得其不影响或尽量少地影响程序其他部分的运行。
提示:总的来说,对于小型程序和大型程序出现异常时,其处理的思想和方法稍有区别。一般来说,当小型程序在出现异常时,则将程序立即中断运行,无条件释放所有资源。
【范例20-1】异常处理的基本思想。该范例实现当除数为零时,停止运行并给出提示信息,实现代码如代码清单20-1所示。
代码清单20-1
1    #include<iostream.h>                                 //包含头文件
2    #include<stdlib.h>
3    double fuc(double x, double y)                        //定义函数
4    {
5        if(y==0)                                        //除数为0
6        {
7            cerr<<"error of dividing zero./n";            //输出错误信息
8            exit(1);                                    //异常退出程序
9        }
10        return x/y;                                    //返回两个数的商
11    }
12    void main()
13    {
14        double res;
15        res=fuc(2,3);                                    //调用函数
16        cout<<"The result of x/y is : "<<res<<endl;        //输出正确结果
17        res=fuc(4,0);                                    //除数为0发生异常
18        cout<<"The result of x/y is : "<<res<<endl;        //不执行该语句
19    }
【运行结果】同样的,在Visual C++中新建一个【C++ Source File】文件,输入上述的代码,编译无误后运行。
【范例解析】上述代码中,定义了函数fuc(),用于返回两个数的商,并处理当除数为0时的异常,在主函数main()中第17行调用fuc()函数时出现了一个除数为0的异常,其并不输出两个数的商,而是调用代码中第4~9行的异常处理,输出错误信息并异常退出程序。

注意:exit()函数用于退出程序,该函数可加参数,其中exit(0)表示正常退出程序,而exit(1)表示异常退出程序。
当然,如果是在大中型程序中,上述处理方法就过于简单。这是因为在大中型程序中,函数之间有着明确的分工和复杂的调用关系。由于在这些程序中,发现错误的程序往往在函数调用链的底层,如果简单地在发现错误的函数中处理异常,就没有机会把上层函数已经完成的一些工作做妥善的处理。

二十一天学通C++之异常概述相关推荐

  1. 21天学通python第二版-电子工业出版社-网上书店

    本书全面.系统.深入地讲解了 Python 编程基础语法与高级应用.在讲解过程中,通过大量实际操作的实例将 Python 语言知识全面.系统.深入地呈现给读者.此外,作者专门为本书录制了大量的配套教学 ...

  2. 21天学通python-21天学通python

    21天学通python全面.系统.深入地讲解了Python编程基础语法与高级应用.自从计算机诞生之日起,编程就是计算机相关工作的一部分,如今编程不再只是与计算机有关的工作,它已经渗透到社会生成的各个领 ...

  3. 21day学通python epub_21天就让你掌握Python语言,《21天学通Python》PDF版送给你去学...

    Python的学习书籍小编看过很多,但是这本<21天学通Python>真的是堪称极品! 本书的作者团队成员为一线开发工程师.资深编程专家或专业培训师,在编程开发方面有着丰富的经验,并已出版 ...

  4. 21天学通python pdf-21天学通Python PDF百度网盘资源下载

    提取码:gr0z 内容简介  · · · · · · <21天学通Python>全面.系统.深入地讲解了Python编程基础语法与高级应用.在讲解过程中,通过大量实际操作的实例将Pytho ...

  5. 21天精通python-21天学通Python 完整pdf扫描版[58MB]

    21天学通Python全面.系统.深入地讲解了Python编程基础语法与高级应用.在讲解过程中,通过大量实际操作的实例将Python语言知识全面.系统.深入地呈现给读者.此外,作者专门为本书录制了大量 ...

  6. ole2高级编程技术 pdf_21天快速掌握Python语言,《21天学通Python》PDF版送给你去学...

    Python的学习书籍小编看过很多,但是这本<21天学通Python>真的是堪称极品! 本书的作者团队成员为一线开发工程师.资深编程专家或专业培训师,在编程开发方面有着丰富的经验,并已出版 ...

  7. 21天学通c语言第四版pdf,21天学通Visual C++ PDF扫描版[116MB]

    21天学通Visual C++ 内容简介: 本书是Visual C++语言的入门教程,较全面地介绍了Visual C++编程的相关知识,然而,本书并没有泛讲Visual C++语言的所有知识,而是突出 ...

  8. 『飞鸽』彻底学通string.Format以及IFormattable,IFormatProvider,ICustomFormatter

    彻底学通string.Format以及IFormattable,IFormatProvider,ICustomFormatter 自从使用.net以来就一直都在使用string.Format方法,一直 ...

  9. ole2高级编程技术 pdf_别不信,21天就可以学会python,《21天学通Python》pdf免费领取...

    python的学习书籍小编看过很多,但是这本<21天学通python>真的是堪称极品!本书的作者团队成员为一线开发工程师.资深编程专家或专业培训师,在编程开发方面有着丰富的经验,并已出版过 ...

  10. 21天学通python-21天学通Python PDF 高清版

    给大家带来的一篇关于Python相关的电子书资源,介绍了关于Python方面的内容,本书是由电子工业出版社出版,格式为PDF,资源大小58.3 MB,刘凌霞,郝宁波,吴海涛编写,目前豆瓣.亚马逊.当当 ...

最新文章

  1. oracle parallel 并行 设置 理解
  2. python对应位置相乘
  3. 惠普发布软件定义存储 助力提升虚拟化能力
  4. 中国民办教育市场需求与运营策略建议报告2022版
  5. ubuntu21.04中文冒号变乱码问题解决
  6. 性能测试(06)-逻辑控制器
  7. 一个由于Pricing RFC引起的UI超时问题
  8. 2017.9.19 L语言 失败总结
  9. SSM中(Spring-SpringMVC-Mybatis)(二:整合)
  10. leetcode—13.链表基本操作类题目python解答
  11. PHP实现单向链表解决约瑟夫环问题
  12. 浅谈Go语言中的面向对象
  13. 元组与字典——python
  14. PDF限制编辑怎么解决
  15. logistic回归分析优点_机器学习实战项目-Logistic回归
  16. 项目实战:简易俄罗斯方块(附源码)
  17. mysql 配置环境变量的方法及作用
  18. sssssssssssssssssssssssssss
  19. Linux常用指令整理
  20. GISER的技术栈(亲们,又更新了哦!)

热门文章

  1. Django项目:CRM(客户关系管理系统)--02--01PerfectCRM基本配置ADMIN02
  2. 第一章:Chrome 43 配置 java + selenium 环境
  3. 通过jquery 获取下拉列表中选中的值对应的value
  4. uva133-救济金发放
  5. HTML5的10大优势
  6. 一些用xib加载主界面的过程
  7. 分享一个导出数据到 Excel 的类库
  8. [HTML] 表单和输入
  9. CMake中include指令介绍
  10. idea中git回退远程仓库版本