异常的总结
来源:互联网 发布:db2 查看数据库版本 编辑:程序博客网 时间:2024/05/21 05:04
(1)在匹配的过程中,不会将一种异常类型自动转换为另一个中异常。
class Exception1{};class Exception2{public:Exception2(const Exception1&) {}};void f(){throw Exception1();}int _tmain(int argc, char* argv[]){try{f();}catch(Exception2&){cout<<"inside catch(Exception2&)"<<endl;}catch(Exception1&){cout<<"inside catch(Exception1&)"<<endl;}return 0;}
尽管在Exception2中有一个从Exception1到Exception2的转换构造函数,但是在匹配的过程中并不执行,而是进入匹配Exception1的异常处理器。
(2)通过基类的引用,可以捕获基类异常及其派生类的异常。
class X{public:class Trouble {};class Small:public Trouble {};class Big:public Trouble {};void f() {throw Big();}};int _tmain(int argc, char* argv[]){X x;try{x.f();}catch(X::Trouble&){cout<<"catch Trouble"<<endl;}catch(X::Small&){cout<<"catch Small"<<endl;}catch(X::Big&){cout<<"catch Big"<<endl;}return 0;}
以上输出catch Trouble。
通常的做法:首先捕获派生类的异常,并且将基类放到最后用于捕获其他不太具体的异常。
(3)函数级try块。
class Base{public:class BaseExcept {};Base(int ii):i(ii) {throw BaseExcept();}private:int i;};class Derived:public Base{public:class DerivedExcept {const char* msg;public:DerivedExcept(const char* msg):msg(msg) {}const char* what() const {return msg;}};Derived(int j)try:Base(j){cout<<"This won't print"<<endl;}catch(BaseExcept&){throw DerivedExcept("Base subobject threw");}};int _tmain(int argc, char* argv[]){try{Derived d(3);}catch(Derived::DerivedExcept& d){cout<<d.what()<<endl;}return 0;}
上述派生类的构造函数就用了函数级的try块,这样的用法可以捕捉基类或者成员对象在构造过程中抛出的异常。构造函数的函数体就是try块,异常处理器在函数体外。
- java异常的总结
- 异常的总结
- 异常的总结
- 对于异常的总结
- Java的异常总结
- 异常的知识点总结
- 异常的总结
- java异常的总结
- Java的异常总结
- SQLCipher的异常总结
- io异常的使用总结
- C# 自定义异常的总结
- Java常见的异常总结
- javaweb的一些异常总结
- 黑马程序员---异常的总结
- java 异常处理的总结
- C# 自定义异常的总结
- 黑马程序员---异常的总结
- 802.1ad帧格式
- linux下configure参数简单说明
- (JAVA自学笔记)I/O流操作
- Linux 系统查找文件命令总结
- mongodb的mapreduce
- 异常的总结
- shell打包上个月的日志文件
- 依赖倒置原则
- android压缩图片的方法
- 细说c语言的优先级
- NDK中调用已有的so生成新的so
- 页面中滚动条属性
- 多浏览器兼容的js获取浏览器高度和宽度方法
- nagios客户端程序的安装(翻译官方文档 NRPE.pdf)