异常处理–将基类和派生类捕获为异常: 如果基类和派生类都被捕获为异常,那么派生类的catch块必须出现在基类之前。 如果我们把基类放在第一位,那么派生类catch块将永远无法到达。例如,遵循C++代码打印 “捕获的基本异常”
null
C++
#include<iostream> using namespace std; class Base {}; class Derived: public Base {}; int main() { Derived d; // some other stuff try { // Some monitored code throw d; } catch (Base b) { cout<< "Caught Base Exception" ; } catch (Derived d) { //This catch block is NEVER executed cout<< "Caught Derived Exception" ; } getchar (); return 0; } |
在上面的C++代码中,如果我们改变catch语句的顺序,那么两个catch语句都将成为可访问的。下面是修改后的程序,它会打印出来 “捕获的派生异常”
C++
#include<iostream> using namespace std; class Base {}; class Derived: public Base {}; int main() { Derived d; // some other stuff try { // Some monitored code throw d; } catch (Derived d) { cout<< "Caught Derived Exception" ; } catch (Base b) { cout<< "Caught Base Exception" ; } getchar (); return 0; } |
在Java中,编译器本身不允许在派生之前捕获基类异常。在C++中,编译器可能会发出警告,但编译代码。 例如,以下Java代码在编译中失败,并显示错误消息 “派生的异常已被捕获”
JAVA
//filename Main.java class 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) {} } } |
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END