再问一道《C++ Primer》习题(关于dynamic_cast),该如何解决
再问一道《C++ Primer》习题(关于dynamic_cast)
第三版习题19.1.
class X
{
public:
X(){};
virtual ~X(){};
};
class A
{
public:
A(){};
virtual ~A(){};
};
class B:public A
{
public:
B(){};
virtual ~B(){};
};
class C:public B
{
public:
C(){};
virtual ~C(){};
};
class D:public X,public C
{
public:
D(){};
virtual ~D(){};
};
int main()
{
A *pa=new D;
X *px=dynamic_cast <X*> (pa);//答案说这句会失败
return 0;
}
按照书上的答案,上面标记的地方会出错,但是我在VS2005和DEVCPP中试都是正常的,为什么?
------解决方案--------------------
为什么不是d/c之误?
------解决方案--------------------
X *px=dynamic_cast <X*> (pa);//答案说这句会失败
--------------------------------------------
为什么会失败?应该可以阿
------解决方案--------------------
这个地方不应该错的,估计是书上印刷错误。
d从x public继承而来,dynamic_cast刚好可以派上用场。
------解决方案--------------------
那就没着了,D应该刚好能用的。
要是C的话就,你和书就都对了
第三版习题19.1.
class X
{
public:
X(){};
virtual ~X(){};
};
class A
{
public:
A(){};
virtual ~A(){};
};
class B:public A
{
public:
B(){};
virtual ~B(){};
};
class C:public B
{
public:
C(){};
virtual ~C(){};
};
class D:public X,public C
{
public:
D(){};
virtual ~D(){};
};
int main()
{
A *pa=new D;
X *px=dynamic_cast <X*> (pa);//答案说这句会失败
return 0;
}
按照书上的答案,上面标记的地方会出错,但是我在VS2005和DEVCPP中试都是正常的,为什么?
------解决方案--------------------
为什么不是d/c之误?
------解决方案--------------------
X *px=dynamic_cast <X*> (pa);//答案说这句会失败
--------------------------------------------
为什么会失败?应该可以阿
------解决方案--------------------
这个地方不应该错的,估计是书上印刷错误。
d从x public继承而来,dynamic_cast刚好可以派上用场。
------解决方案--------------------
那就没着了,D应该刚好能用的。
要是C的话就,你和书就都对了