logo资料库

C++异常处理.ppt

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
第11章 异常处理 1
本章学习要求: o 异常的概念 o C++程序中的异常处理 2
11.1 异常的概念 处理程序中的错误对于任何一个程序设计者来讲都是不陌生的,程序中的错 误通常包括三类:语法错误、逻辑错误和运行异常。 语法错误是指程序中源代码的书写不符合语言的语法规范. 逻辑错误(或语义错误)是指程序设计不当而造成程序不能完成预期的功能 。 运行异常是指由程序运行环境问题造成的程序异常中止。 如,程序提出内 存分配申请,但内存空间不足;程序运行时要打开文件,但在硬盘中的该文 件被删除或移走等等,这些情况都会造成运行异常。 导致程序运行异常的错误是不可以避免的,因为程序的实际运行环 境通常不是由程序员所能够严格控制的,可能会随时发生变化,但是运行异 常是可以预料的,程序员可以通过分析程序和运行环境的交互,从而获知运 行环境可能的异常情况,并在程序中,对各种可能的异常情况进行预先的处 理,以使程序在各种情况下都能尽可能的正确顺利运行。 3
11.2 C++的异常处理机制 C++中使用异常处理机制包括: 抛出异常。 捕获异常。 处理异常。 C++中使用throw抛出异常,使用try…catch捕获和处理异常。 4
11.2.1 抛出异常throw 抛出异常的语法格式如下: throw [<表达式>]; 如果某段程序中发现了自己不能处理的异常情况,就可以使用该方式 抛出这个异常,将它抛给调用该段程序的函数。其中,表达式值的类 型称为异常类型,它可以是任意的C++的类型(void除外),包括C++ 的类。如: throw 1; //抛出一个异常,该异常为int类型,值为1 throw “number error”; //抛出一个异常,该异常为char*类型,值为字符 串的首地址。 在执行完throw语句后,系统将不执行throw后面的语句,而是直接跳 到异常处理语句部分进行异常的处理。 5
11.2.2 捕获和处理异常try、catch 对于被调用函数抛出的异常,调用函数需要进行捕获,并给出相应的处理。 C++中捕获和处理异常使用try…catch语句块,语法格式如下: try { ...... //可能抛出异常的语句序列 } catch(<异常类型名1> [<异常对象名>]){ ...... //异常处理代码 } catch(<异常类型名2> [<异常对象名>]){ ...... //异常处理代码 } … catch(<异常类型名n> [<异常对象名>]){ ...... //异常处理代码 } 6
若try内的代码抛出一个异常,则在内部“throw表达式;”代码执行 后,立即跳转到try后的catch块列表中,按照catch块出现的先后顺 序,查找<异常类型名>和抛出的异常对象的类型相同的catch块。 若找到,将抛出的异常对象的值赋值给对应catch块的<异常对象名 >,并进入该catch块执行(类似一个函数调用过程)。执行完该 catch块代码后,跳过和其并列的其它的catch块到try…catch后面 的语句执行。 7
cout << "抛出异常前"; throw "program exception"; cout << "抛出异常后"; cout << "bool exception"; cout << p << endl; try{ } catch(bool b){ } catch(char* p){ } catch(int i){ cout << "int exception"; } cout << "异常处理结束"; 该段代码执行将输出: 抛出异常前program exception 异常处理结束 8
分享到:
收藏