天天看點

多繼承下 基類與派生類指針轉換的一個問題

假設有基類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*來傳遞對象的位址啊

版權聲明:本文為CSDN部落客「weixin_33691700」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_33691700/article/details/91998147