多继承下 基类与派生类指针转换的一个问题

假设有基类A和B,派生类C公有继承于A和B:

Class C  : public A  ,  public B

现有如下代码:

class A

{

private:

       int m_iA;

};

 

class B

{

private:

       int m_iB;

};

 

class C : public A, public B

{

};

 

void fun(void* pVoid)

{

       A* pA  = (A*)pVoid;

 

       B* pB  = (B*)pVoid;

}

 

int _tmain(int argc, _TCHAR* argv[])

{

       C* pObj = new C();

       A* pASrc = pObj;

       B* pBSrc = pObj;

 

       fun((void*)pObj);

 

       delete pObj;

       pObj = NULL;

       return 0;

}

运行一次各个指针值如下:

pObj     0x00399180

pASrc    0x00399180

pBSrc    0x00399184

pA       0x00399180

pB       0x00399180

pA  和 pB 的值一样了,如果用pB去掉该基类的方法就会悲剧的,直接找不到正确的方法入口地址。

如此看来,以后code时一定要注意了,不要随便用void*来传递对象的地址啊

转载于:https://my.oschina.net/u/262868/blog/110556

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值