请教一个C++关于异常的程序阅读题

Henry_2017 2016-12-19 07:29:50
代码如下:

#include "iostream"
using namespace std;

class CMyExcept
{
void writeout(){cout<<"XXX\n";}
};

class CExcept0: public CMyExcept
{
public: void writeout(){cout<<"AAA\n";}
};

class CExcept1: public CExcept0
{
public: void writeout(){cout<<"BBB\n";}
};

class CExcept2: public CExcept1
{
public: void writeout(){cout<<"CCC\n";}
};


void main()
{

char ch;
try{
cin>>ch;
switch(ch)
{
case '0': throw CExcept0();
case '1': throw CExcept1();
case '2': throw CExcept2();
}
}
catch(CExcept0)
{
cout<<'A'<<endl;
CExcept0 a;
a.writeout();
}
catch(CExcept1)
{
cout<<'B'<<endl;
CExcept1 b;
b.writeout();
}
catch(CExcept2)
{
cout<<'C'<<endl;
CExcept2 c;
c.writeout();
}
}

运行结果如下:

我认为运行结果应该是 C
CCC
为什么会是这样呢?
...全文
426 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
过客猫2022 2017-01-17
  • 打赏
  • 举报
回复
引用 1 楼 akirya 的回复:
由基类捕获了, 要想达到你的效果,就把捕获顺序换一下
catch( CExcept2 e)
    {
        cout << 'C' << endl;
        CExcept2 c;
        c.writeout();
    }
    catch( CExcept1 e)
    {
        cout << 'B' << endl;
        CExcept1 b;
        b.writeout();
    }
    catch( CExcept0 e)
    {
        cout << 'A' << endl;
        CExcept0 a;
        a.writeout();
    }
94!
  • 打赏
  • 举报
回复
由基类捕获了, 要想达到你的效果,就把捕获顺序换一下
catch( CExcept2 e)
    {
        cout << 'C' << endl;
        CExcept2 c;
        c.writeout();
    }
    catch( CExcept1 e)
    {
        cout << 'B' << endl;
        CExcept1 b;
        b.writeout();
    }
    catch( CExcept0 e)
    {
        cout << 'A' << endl;
        CExcept0 a;
        a.writeout();
    }

552

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧