C++:异常概述



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

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

延伸阅读

最新评论

发表评论