【发布时间】:2011-08-10 16:48:44
【问题描述】:
下面抛出的异常对象的类型是什么:
问题1> range_error r("error"); throw r;
Answer1> range_error 的一个对象
问题2> exception *p = &r; throw *p;
Answer2>异常的切片对象
问题3> exception *p = &r; throw p;
Answer3> 一个指向 range_error 的指针被抛出。捕获处理可以通过动态绑定访问range_error成员函数。
这些问题我答对了吗?
//在VS2010上更新编译运行
#include <iostream>
using namespace std;
class ExClassA
{
public:
virtual void PrintMe() const
{
cout << "ExClassA" << endl;
}
};
class ExClassB : public ExClassA
{
public:
virtual void PrintMe() const
{
cout << "ExClassB" << endl;
}
};
int main(int argc, char* argv[])
{
ExClassB exClassB;
ExClassA *p = &exClassB;
try
{
throw *p;
}
catch (const ExClassA& e)
{
e.PrintMe();
}
try
{
throw p;
}
catch (const ExClassA* e)
{
e->PrintMe();
}
}
上述程序的第一个try-catch打印“ExClassA”
上述程序的第二次try-catch打印“ExClassB”
【问题讨论】:
-
参考:李普曼 17.1。
-
这取决于你说“新”时的想法。
-
@Kerrek,我考虑过“新”可能会引起混淆,因此我已将其从 OP 中删除。
标签: c++