C++的异常处理

 

C++的异常处理用到:try{}catch(){}

try块是一个普通的程序块,就一般运行情况而言跟没有tryd的情况是一样的,但在异常出现时,往往把可能出现异常的一些语句,包括函数的调用,比如在数据库编程编程中,一些管理信息系统在连接数据库的时候(特别是ADO方式),往往会把数据库的连接与表的打开语句放在里面,若连接失败或打开失败,则抛出一个异常,异常在紧随的catch语句中被捕获,然后执行catch对应的语句,详细的下面再说。

 

异常的抛出机制

     异常是什么意思?这个我觉得用我们一般的思维去想就可以了,英语里可以通俗地说是:something bad。

     异常抛出往往是用关键字throw,一般是“throw 对象;”注意的是,throw抛出的是对象的一个拷贝,处理的手段跟函数的return有相似之处,但是两者又有不同,return的类型是必须跟函数原先说明的返回值是一样的;而throw则不用理会调用它的函数的返回类型是什么。

 

try块

     由于所有程序必须要做的工作都放在try块中,而如何处理错误是集中在catch块中,因此,代码会具有更高的可读性,也方便编写,因为我们不必在编写必要的工作时,时时刻刻都想着如何去处理出现的错误,对于阅读者来说,对于有多少可能出现的异常和相应的处理方式,更是一目了然。

 

异常的匹配机制

      catch括号内会有对应的参数类型,当throw出一个对象,就会在后面的一个或几个catch中查找出与对象类相关的第一个语句,并执行这个catch后中括号内的子句,而且后面的catch语句都不再作匹配判断了,直接跳过。

      在这里,再深一层去想,你会发现在基类与派生类的异常匹配你会出现疑问,幸好早就有大师为我们回答了这个问题,Bruce Eckel的C++编程思想里面有这样的两个方面:

      Ⅰ、一个对象或者是指向派生类的引用都与基类处理器匹配,这就是异常匹配的不完全相关性,也就是我上面说相关而不是说相同的原因。 

      也由于这个原因,一般首先捕获派生类的异常,再捕捉基类异常。

      Ⅱ、如果异常处理器(也就是catch)是针对对象而不是引用,那么异常对象将会被“切割”,变为基类对象,其他派生的信息都会丢失,因此通常在catch中使用引用而不是值参数,以防异常对象所包含信息被切割掉(这个做法还可以避免匹配时对异常对象的拷贝)。

 

捕获所有异常

      顾名思义,就是一个异常处理器能捕捉到所有的异常,通常这是放在异常处理器列表的最后,以免把其他的异常处理器给屏蔽掉。

     其实现方法就是:

     catch(...){}

(通常这是用于清理资源)

 

喜欢记录的人还是很多的哈哈,贴一个  http://softbbs.pconline.com.cn/7251662.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值