请教一个关于用dynamic_cast转换的问题?
dynamic_cast能被用于安全地沿着类的继承关系向下进行类型转换,也就是说, 能用dynamic_cast把指向基类的指针或引用转换成指向其派生类或其兄弟类的指针或引用, 但不知道我写的一个小测试程序为什么会抛出异常? 希望各位大虾帮帮忙。
#include <iostream>
using namespace std;
class B
{
public:
virtual void print() { cout << " B class" << endl; }
};
class D1 : public B
{
public :
void print() { cout << " D1 class " << endl;}
};
class D2 : public B
{
public:
void print() { cout << " D2 class " << endl;}
};
void fn(D1 *ptr)
{
ptr->print();
}
int main()
{
B *pb = new B;
D1 d1;
D2 d2;
fn(&d1);
fn( dynamic_cast<D1*> (pb) ); // 请问为什么会抛出异常?
}