如果基类和子类都被做为异常捕获,则子类的catch代码块必须出现在基类之前。
如果把基类放在前面,则子类的catch代码块永远都不会被调用。
参考下面例子。
#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" << endl;
}
catch (Derived d) { //这个catch代码块永远都不会被执行
cout << "Caught Derived Exception" << endl;
}
return 0;
}
运行结果:
Caught Base Exception
上述程序中,如果调整一下声明的顺序,则都可以被捕获。
参考下面例子。
#include<iostream>
using namespace std;
class Base {};
class Derived : public Base {};
int main() {
Derived d;
try {
throw d;
}
catch (Derived d) {