C++异常(3) - 捕获基类与子类的异常
来源:互联网 发布:手机查看网页源码 编辑:程序博客网 时间:2024/06/03 13:19
如果基类和子类都被做为异常捕获,则子类的catch代码块必须出现在基类之前。
如果把基类放在前面,则子类的catch代码块永远都不会被调用。
例如,下面程序打印“Caught Base Exception”。
#include<iostream>using namespace std;class Base {};class Derived: public Base {};int main(){ Derived d; try { throw d; } catch(Base b) { cout<<"Caught Base Exception"; } catch(Derived d) { //这个catch代码块永远都不会被执行 cout<<"Caught Derived Exception"; } return 0;}上述程序中,如果调整下声明的顺序,则都可以被捕获。
下面是修改之后的程序,会打印“Caught Derived Exception”。
Java中, 编译器不允许在子类之前捕获基类的异常。C++中,编译器会给出类似下面的警告,但是还是可以编译成功。
visual studio 2015会提示: "warning C4286: “Derived”: 由基类(“Base”)在行 17 上捕获"
例如,下面Java代码会编译失败, “exception Derived has already been caught”
//文件保存为Main.javaclass Base extends Exception {}class Derived extends Base {}public class Main { public static void main(String args[]) { try { throw new Derived(); } catch(Base b) {} catch(Derived d) {} }}
0 0
- C++异常(3) - 捕获基类与子类的异常
- C++异常(3) - 捕获基类与子类的异常
- 子类异常和父类异常捕获的关系
- 异常处理中子类和父类的捕获问题
- Java异常处理、异常处理使用的一些注意点(例如,基类和子类捕获的顺序问题)
- 异常的捕获与处理
- 异常的信息处理与捕获
- 异常的捕获与处理
- C#_WinForm 统一捕获未处理的异常
- OBject-C捕获异常,常用的异常处理方法
- java异常的捕获与抛出原则
- java异常的捕获与抛出原则
- App9_12_异常的捕获与处理
- Java- 异常的抛出与捕获
- java异常的捕获与抛出原则
- java异常的捕获与抛出原则
- C++的异常抛出与捕获
- 异常捕获的问题
- java基础篇——内部类
- nginx 作为反向代理实现负载均衡的例子
- 写函数实现打印出1到最大的n位数,形参为n位数
- Android滑动菜单特效实现,仿人人客户端侧滑效果,史上最简单的侧滑实现
- 使用Nginx反向代理与proxy_cache缓存搭建CDN服务器的配置方法
- C++异常(3) - 捕获基类与子类的异常
- identifier starts immediately after numeric literal
- 网站进止友链交换时需供重视的事项有哪些? 05月27日
- 若何选择企业网站系统切开SEO要供 05月27日
- 学习DOS命令中的部分章节
- 继承覆盖与多态
- nginx反向代理配置及优化
- adt安装失败 解决方法
- Endnote X4 导入enw文件设置方法