假設有基類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