将基类和派生类捕获为异常

异常处理–将基类和派生类捕获为异常: 如果基类和派生类都被捕获为异常,那么派生类的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
喜欢就支持一下吧
点赞15 分享