一个C++的对象指针值比较问题(期待您的解决)
分析一下这道程序?
class A{
int m_nA;
};
class B{
int m_nB;
};
class C{
int m_nC;
};
class D:public A,public B,public C{
int m_nD;
};
int main()
{
using namespace std;
D *pD = new D;
A *pA = dynamic_cast<A*>(pD);
B *pB = dynamic_cast<B*>(pD);
C *pC = dynamic_cast<C*>(pD);
cout << pA << endl << pB << endl << pC << endl << pD << endl;
if(pD == pA)
cout << "pD == pA" << endl;
if(pD== pB)
cout << "pC == pB" << endl;
if(pD == pC)
cout << "pD == pC" << endl;
cout << (dynamic_cast<C*>(pD) == pC) << endl;
}
运行后的结果是:
00384F20
00384F24
00384F28
00384F20
pD == pA
pD == pB
pD == pC
1
请按任意键继续. . .
他们的内存结构应该如下:
高地址
_______________
|__m_nD_______|
|__m_nC_______|<-pC
|__m_nB_______|<-pB
|__m_nA_______|<-pA,pD
低地址
所以地址是
00384F20
00384F24
00384F28
00384F20
但为什么会输出相等呢??是不是和没有定义“==”的重载有关,不甚理解,请高人指点。
我用的是VS2005