08异爱顾常处理.pptVIP

  • 1
  • 0
  • 约1.27万字
  • 约 30页
  • 2018-12-22 发布于福建
  • 举报
08异爱顾常处理

* 程序编制者不仅要考虑程序没有错误的理想情况,更要考虑程序存在错误时的情况,应该能够尽快地发现错误,消除错误。 有的程序虽然能通过编译,也能投入运行。但是在运行过程中会出现异常,得不到正确的运行结果,甚至导致程序不正常终止,或出现死机现象。这类错误比较隐蔽,不易被发现,往往耗费许多时间和精力。这成为程序调试中的一个难点。 在运行没有异常处理的程序时,如果运行情况出现异常,由于程序本身不能处理,程序只能终止运行。如果在程序中设置了异常处理机制,则在运行情况出现异常时,由于程序本身已规定了处理的方法,于是程序的流程就转到异常处理代码段处理。用户可以指定进行任何的处理。 * 在一个小的程序中,可以用比较简单的方法处理异常。但是在一个大的系统中,如果在每一个函数中都设置处理异常的程序段,会使程序过于复杂和庞大。 * * 当某段程序发现了自己不能处理的异常,就可以使用throw语句将这个异常抛掷给调用者。throw语句的使用与return语句相似,如果程序中有多处要抛掷异常,应该用不同的表达式类型来互相区别,表达式的值不能用来区别不同的异常 * #include iostream #include cmath using namespace std; int main( ) { double triangle(double,double,double); double a,b,c; cinabc; while(a0 b0 c0) { couttriangle(a,b,c)endl; cinabc; } return 0; } double triangle(double a,double b,double c) { double area; double s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); return area; } * * #include iostream #include cmath using namespace std; void main( ) { double triangle(double,double,double); double a,b,c; cinabc; try//在try块中包含要检查的函数 { while(a0 b0 c0) { couttriangle(a,b,c)endl; cinabc; } } catch(double) //用catch捕捉异常信息并作相应处理 { couta=a,b=b,c=c,that is not a triangle!endl; } coutendendl; } //计算三角形的面积的函数 double triangle(double a,double b,double c) { double s=(a+b+c)/2; //当不符合三角形条件抛出异常信息 if (a+b=c||b+c=a||c+a=b) throw a; return sqrt(s*(s-a)*(s-b)*(s-c)); } * 这一点上,编译器能够处理抛掷类型的异常,在更高执行上下文中寻找一个catch语句(或一个能处理任何类型异常的catch处理程序)。catch处理程序按其在try块后出现的顺序被检查。如果没有找到合适的处理程序,则继续检查下一个动态封闭的try块。此处理继续下去,直到最外层的封闭try块被检查完。 * 不能不处理异常。异常是足够重要的、使程序不能继续正常执行的事件。如果找不到匹配的 catch,程序就调用库函数 terminate。 一般而言,terminate 函数将调用 abort 函数,强制从整个程序非正常退出。 * * * * 从本质上说,类型表示的是一种数据结构和对此数据结构的合理算法 * * #include iostream using namespace std; int main(){ try{ int ex = 0; throw ex; } catch(float e) //这里从 int 到float 的转换不允许 { coutfloat catchedendl; } catch(int e) //这个catch捕获到异常 { coutint catchedendl; } return 0; } * //输出 Base #include iostream using namespace std; class Base{};

文档评论(0)

1亿VIP精品文档

相关文档