C++父子类之间的转换

先举个例子,

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);

这里不详解为什么直接转换得到的是错误的指针,这涉及到多继承中多个父类的内存布局问题,关于这篇请参考多重继承及虚继承中对象内存的分布

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

留言

你的邮箱是保密的 必填的信息用*表示