先举个例子,
class CA
{
public:
virtual funA();
private:
int a;
}
class CB
{
public:
virtual funB();
private:
int b;
}
class CC : public CA
{
public:
virtual funC();
private:
int c;
}
class CD : public CC, public CB
{
public:
virtual funD();
private:
int d;
}
CA* pa = new CD;
如果想得到父类CB的指针,则使用dynamic_cast<>,而不是直接转换,直接转换的指针是错误的,直接转换用在单继承中是没有问题的,但是多继承中得不到正确的指针。
所以正确的做法是:
CB* pb = dynamic_cast<CB*>(pa);
错误的做法:
CB* pb = (CB*)(pa);
这里不详解为什么直接转换得到的是错误的指针,这涉及到多继承中多个父类的内存布局问题,关于这篇请参考多重继承及虚继承中对象内存的分布。
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.