5章 错误处理方法.ppt
文本预览下载声明
注意 错误处理代码通常比一般代码更难和不易理解 通常正确的代码给出一种输出 而错误的代码会产生不同的错误输出 如果更多的人使用这个程序,则错误处理应做得更好 当代码供自己使用时,错误是自已的问题 当代码供朋友使用时,错误会让你失去朋友 当代码被其他不认识的人使用时,错误会让他们很伤心 他们不知道如何修复这个错误 * 前置条件 函数需要的参数是什么? 这种需要通常称为前置条件 检查函数的参数是一个好办法 int area(int length, int width) // 计算矩形的面程 // length and width must be positive { if (length=0 || width =0) throw Bad_area(); return length*width; } * 后置条件 必须确定函数的返回值是什么? 这种检查称为后置条件 int area(int length, int width) // calculate area of a rectangle // length and width must be positive { if (length=0 || width =0) throw Bad_area(); // the result must be a positive int that is the area // no variables had their values changed return length*width; } * 前后条件 总是要想到有什么前后条件 至少要把它们写在注释中 检查值的合理性 在查找错误时更要注意值的合理性 有时这项工作很需要技巧 有时会出现在前置条件满足时,后置条件不满足的情况 * 测试 如何测试一个程序? 系统化 只有小的程序可以直接从键盘输入代码来解决问题,对于实用程序往往需要进行系统化的设计 从一开始就考虑到测试和正确性问题 分别测试每段程序 E.g., 当完成一个复杂的函数时,写一个主程序单独调用这个函数测试这个函数的功能。 * 练习 下列25行代码或者没有错误或者有不止一个错误。观察编译程序给出的错误提示,改正错误,使程序输出:Success,不能删掉某个语句,只能在原有语句的基础上改动。 该练习的目的有两个:了解在某种错误下编译程序的反应是什么,所以即使你知道如何改也要在机器上先试一试;熟悉C++的基本语法。 1.CoutSuccess!\n; 2. cout Success!\n; 3. coutSuccess!\n 4. coutsuccessendl; 5. string res = 7; vector int v(10); v[5]=res; coutSuccess!\n; * 6. vector int v(10);v(5)=7; if (v(5)!=7)coutSuccess!\n); 7. if (cond) coutSuccess!\n; else coutFail!\n; 8. bool c=false if(c)cout Success!\n;else coutFail!\n; 9. string s=ape; boo c=fools; if (c) coutSuccess!\n; 10.string s=ape; if (s==fool) coutSuccess!\n; 11.string s=ape;if (s==fool) coutSuccess!\n; 12. string s= ape; if (s+fool) coutSuccess!\n; 13.vectorchar v(5); for (int i=0; 0v.size(); ++i); cout Success!\n; 14.vectorchar v(5); for (int i=0;i=v.size(); ++i); cout Success!\n; 15.string s=Success!\n; for(int i=0;i6;++i) couts[i]; * 16. if (true) then coutSuccess!\n; else coutFail!\n; 17. int x=2000; char c=x; if (c==2000) cout Success!\n; 18. string s=Success!\n; for (int i=0;i10;++i) couts[i]; 19. vector v(5); for (int i=0; i=v.size();++i); cout Success!\n; 20. int i=0; int j=9; while(i10) ++j; if (ji
显示全部