c++ 一个小小的问题 请大侠们看下
#include <iostream>class A{ int m_nA;};class B{ int m_nB;};class C:public A,public B{ int m_nC;};int main(){ C* pC=new C; B* pB=dynamic_cast<B*> (pC); A* pA=dynamic_cast<A*> (pC); if(int(pC)==int(pB)) //pB PC 不是指向同一地址么 怎么不相等??? cout<<"equal"<<endl; else cout<<"not equal" <<endl; return 0;}
class C:public B,public A{ int m_nC;};
[解决办法]
dynamic_cast<> 是类型向下转换。
也就是A* 转到 B* 或 C*.
B* 转到 C*。
你这个是向上转,B* pB = pC;就行了。
[解决办法]
*pC布局如下:
m_nA //从A继承下来的 <---pA 和 pCm_nA //从B继承下来的 <--- pBm_nB //从B继承下来的m_nC //C中增加的
[解决办法]
看到多重继承发现
class C:public A,public B C的入口地址是A 那么有pc=pa
class C:public B,public A C的入口地址是B 那么有pc=pb