以下是每个dynamic cast的结果:
X *px=dynamic_cast<X*>(pa);
这个dynamic cast会成功,因为D是X的公有派生类,所以指向D对象的A指针可以转换为指向X对象的X指针。A *pa=dynamic_cast<A*>(pd);
这个dynamic cast会成功,因为D是从B公有派生而来,B是从A公有派生而来,所以指向D对象的B指针可以转换为指向A对象的A指针。D *pd=dynamic_cast<D*>(pb);
这个dynamic cast会失败,因为B并不是D的公有派生类,所以指向B对象的B指针不能转换为指向