第十章异常处理和跟踪调试_第1页
第十章异常处理和跟踪调试_第2页
第十章异常处理和跟踪调试_第3页
第十章异常处理和跟踪调试_第4页
第十章异常处理和跟踪调试_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第九章内容回顾模板的概念模板函数类模板标准模板库第十章异常处理和跟踪预习检查捕获异常的关键字是什么?举出一个异常的例子?3本章结构异常概念异常处理和跟踪调试异常的实现和基本规则异常的基本思想多路捕捉异常处理机制使用异常的方法10.1异常概念程序的错误,一种是编译错误,即语法错误另一种是在运行时发生的错误不可预料的逻辑错误逻辑错误是由于不当的设计造成的可以预料的运行异常运行异常.可以预料,但不能避免,它是由系统运行环境造成的。然而这些错误是能够预料的,通常加入一些预防代码便可防止这些异常

10.1.1异常处理的基本思想函数f()捕获并处理异常函数h()引发异常函数g()……调用者异常传播方向调用关系10.1.1异常处理的基本思想抛掷异常的程序段捕获并处理异常的程序段......throw表达式;......try

复合语句catch(异常类型声明)复合语句catch(异常类型声明)复合语句

…10.1.2异常的实现及基本规则intmain(){

cout<<“Start\n”;try{

cout<<“Insidetryblock\n”;throw100;//抛出异常

cout<<“Thiswillnotexecute”;}

catch(inti){//捕获异常

cout<<“Caughtanexception–valueis:”;

cout<<i<<endl;}catch(…){cout<<“default”<<endl;}

cout<<“End”;return0;}10.1.2异常的实现及基本规则异常处理机制#include<iostream.h>intDiv(int

x,inty);intmain(){ try {cout<<"5/2="<<Div(5,2)<<endl;

cout<<"8/0="<<Div(8,0)<<endl;

cout<<"7/1="<<Div(7,1)<<endl; }

catch(int) {cout<<"exceptofdevidingzero.\n";}

cout<<"thatisok.\n";}intDiv(int

x,inty){ if(y==0)throwy; returnx/y;}程序运行结果如下:5/2=2exceptofdevidingzero.thatisok.10.1.2异常的实现及基本规则编写异常处理程序的规则是任意数量的catch分程序立即出现在try分程序之后。在catch行的圆括号中可包含数据类型声明如果一个函数抛掷一个异常,但在通往异常处理函数的调用链中找不到与之匹配的catch,则该程序通常以abort()函数调用终止10.2多路捕捉多数程序可能有若干不同种类的运行错误,它们可以用异常处理机制。每种错误可与一个类、一个数据类型或一个值有关。这样,在程序中就会出现多路捕获。10.2多路捕捉classRange{//异常类1

public:

Range(int

j):index(j){}

intindex;};classSize{};//异常类2char&operator[](intk){

if(0<=k&&k<len)

returnp[k];

throwRange(k);}10.2多路捕捉if(si<0||max<si)

throwSize();try{

//代码区2

Strings("abcdefghijklmnop",10);

g(s);}catch(String::Ranger){

cerr<<"->outofrange:"<<r.index<<endl;

//代码区3}catch(String::Size){

cerr<<"sizeillegal!\n";}

10.3异常处理机制异常处理机制若有异常则通过throw操作创建一个异常对象并抛掷。将可能抛出异常的程序段嵌在try块之中。控制通过正常的顺序执行到达try语句,然后执行try块内的保护段。如果在保护段执行期间没有引起异常,那么跟在try块后的catch子句就不执行。程序从try块后跟随的最后一个catch子句后面的语句继续执行下去。catch子句按其在try块后出现的顺序被检查。匹配的catch子句将捕获并处理异常(或继续抛掷异常)。如果匹配的处理器未找到,则运行函数terminate将被自动调用,其缺省功能是调用abort终止程序10.4使用异常的方法多个异常组成族系构成异常族系的一些示例有数学错误异常族系文件处理错误异常族系。在c++代码中把异常组在一起有两种方式:异常枚举族系异常派生层次结构。10.4使用异常的方法例如,下面的代码是一个异常枚举族系的例子:

enum

FileErrors{nonExist,wrongFormat,diskSeekError....};try{

//...

throwwrongFormat;}catch(FileErrors

fe){

switch(re)

{

casenonExist:

//...

casewrongFormat:

//...

casediskSeekError:

//...10.4使用异常的方法例如,下面的代码是一个按异常派生层次结构来实现:

classFileErrors{};classnonExist:public

FileErrors{};classWrongFormat:public

FileErrors{};classDiskSeekError:FileErrors{};intf(){ try

{

//...

throwwrongFormat;

}

catch(NonExist)

{

//…

}

catch(DiskSeekError)

{

//...

}

catch(FileError) {

//...

}

//...}C++异常处理机制C++标准库提供了exception的类,它是所有标准库异常类的父类exception有一个virtual函数what(),它返回一个字符串描述异常类型.

参考代码std_exception.cpp本章总结异常概念异常处理和跟踪调试异常

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论