
第21章异常处理
第21章 异常处理

目录21.1异常的概念21.2异常的基本思想21.3异常的实现21.4异常的规则21.5异常处理机制21.6异常的使用
21.1 异常的概念 21.2 异常的基本思想 21.3 异常的实现 21.4 异常的规则 21.5 异常处理机制 21.6 异常的使用

第21章异常处理在编写程序时,需要尝试确定程序可能出现的错误。然后,加入处理错误的代码。例如,当程序执行文件/O操作时,应测试文件打开以及读写操作是否成功,并且在出现错误时,做出正确的反应
• 在编写程序时,需要尝试确定程序可能出现 的错误。 • 然后,加入处理错误的代码。 • 例如,当程序执行文件I/O操作时,应测试文 件打开以及读写操作是否成功。 • 并且在出现错误时,做出正确的反应

第21章异常处理随着程序复杂性的增加,为了处理错误而必须在程序中加入的代码的复杂性也增加了。,为了使程序更易于测试和处理错误,C++实现了异常处理机制。本章介绍了C++异常处理,程序使用try、throw和catch语句来支持异常处理
• 随着程序复杂性的增加,为了处理错误而必 须在程序中加入的代码的复杂性也增加了。 • 为了使程序更易于测试和处理错误,C++实 现了异常处理机制。 • 本章介绍了C++异常处理。 • 程序使用try、throw和catch语句来支持异常 处理

异常的概念21.1 吴在大型软件开发中,最大的问题就是错误的、不稳定的代码而在设计与实现中,最大的开销是花在测试、查找和修改错误上程序的错误,一种是编译错误,即语法错误如果使用了错误的语法、函数、结构和类,程序就无法被生成运行代码
• 在大型软件开发中,最大的问题就是错误的、 不稳定的代码。 • 而在设计与实现中,最大的开销是花在测试、 查找和修改错误上。 • 程序的错误,一种是编译错误,即语法错误。 • 如果使用了错误的语法、函数、结构和类, 程序就无法被生成运行代码

异常的概念21.1吴,另一种是在运行时发生的错误,它分为不可预料的逻辑错误和可以预料的运行异常。逻辑错误时由于不当的设计造成的例如,某个排序算法不合适,导致在边界条件下,不能正常完成排序任务一般只有当用户做了某些出乎意料的事才会出现逻辑错误
• 另一种是在运行时发生的错误,它分为不可 预料的逻辑错误和可以预料的运行异常。 • 逻辑错误时由于不当的设计造成的。 • 例如,某个排序算法不合适,导致在边界条 件下,不能正常完成排序任务。 • 一般只有当用户做了某些出乎意料的事才会 出现逻辑错误

异常的概念21.1即使许多大型的优秀软件也不能避免逻辑错误。一发现了逻辑错误,专门写一段处理错误的代码,就可避免错误的发生例如,数组下标溢出检香虽然运行异常可以预料,但是无法避免运行异常是由系统运行环境造成的
• 即使许多大型的优秀软件也不能避免逻辑错 误。 • 一旦发现了逻辑错误,专门写一段处理错误 的代码,就可避免错误的发生。 • 例如,数组下标溢出检查。 • 虽然运行异常可以预料,但是无法避免。 • 运行异常是由系统运行环境造成的

异常的概念21.1吴,例如,内存空间不足,程序运行中提出内存分配申请得不到满足,就会发生异常。或者,硬盘上的文件被册删除了,导致程序运行中文件打不开而发生异常。或者程序中,发生除0的代码,导致系统除0中断;或者打印机没有打开,调制解调器掉线等
• 例如,内存空间不足,程序运行中提出内存 分配申请得不到满足,就会发生异常。 • 或者,硬盘上的文件被删除了,导致程序运 行中文件打不开而发生异常。 • 或者程序中,发生除0的代码,导致系统除0 中断; • 或者打印机没有打开,调制解调器掉线等

异常的概念21.1吴这些错误,会使程序变得脆弱,但是,这些运行错误时能够预料的。通常加入一些预防代码便可防止这些异常异常是一种程序定义的错误,对程序的逻辑错误进行设防,对运行异常加以控制C++中,异常是对能预料到的运行错误进行处理的一套实现机制
• 这些错误,会使程序变得脆弱。 • 但是,这些运行错误时能够预料的。 • 通常加入一些预防代码便可防止这些异常。 • 异常是一种程序定义的错误,对程序的逻辑 错误进行设防,对运行异常加以控制。 • C++中,异常是对能预料到的运行错误进行 处理的一套实现机制

21.1异常的概念例21一1:对文件打不开时的保护#includeusing namespace std;/ / .void f(char * str)ifstream source(str);//打开str串中的文件if (source.fail()如果打不开文件cerr <<"Error opening the file: " << str << endl ;exit(1) ;/退出程序17
例21—1:对文件打不开时的保护 #include using namespace std ; //. void f ( char * str) { ifstream source (str) ; //打开str串中的文件 if ( source . fail( ) ) //如果打不开文件 { cerr << "Error opening the file: " << str << endl ; exit(1) ; //退出程序 } }