抛出派生类对象作为异常object.it不会被基类对象类型catch块捕获。为什么?

时间:2017-04-11 11:55:02

标签: inheritance exception-handling derived-class base-class

我将派生类对象作为异常抛出。我有一个带有基类对象类型参数的catch块和一个catch all块。 我已将基类继承为私有。 我怀疑期望基类对象的catch块会捕获异常。但事实并非如此。 当我公开继承基类时,它按预期工作。 为什么私有继承会改变catch块的工作。

#include <iostream>
using namespace std;
class MyExcept1 {
public:
    int a;
};
class MyExcept2:MyExcept1{
public:    
    int b;
}; 
int main()
{
    try{
        MyExcept2 myexp1;
       throw myexp1;
    }
    catch(MyExcept1 e2){
        cout << "Caught MyExcept2 " << endl;
    }
    catch(...){
        cout << " Defaule catch block " << endl;
    }
    return 0;
}

0 个答案:

没有答案