#include<iostream>
#include <string>
using namespace std;
class A
{
public: int a;
};
class B
{
public: int b;
};
class C: public A, public B{
public:
int c;
};
int main()
{
// C* cc=new C();
// A* aa=dynamic_cast<A*>(cc);
// B* bb=dynamic_cast<B*>(cc);
C* cc=new C();
A* aa=(A*)cc;
B* bb=(B*)cc;
//if (aa==bb) cout<<"aa==bb"<<endl;编译错误
if (aa==cc) cout<<"aa==cc"<<endl;
if (bb==cc) cout<<"bb==cc"<<endl;
//A* aa=(A*)bb;
cout<<cc<<bb<<aa<<endl;
system("pause");
}
aa==cc
bb==cc
0x5517e8
0x5517ec
0x5517e8
判断aa==cc时,其实是将aa转化为C*类型,然后判断,由于aa是cc指向的对象的A类型部分的首地址,所以aa转化为C*类型后就是指向cc所指向的对象的首地址,同理bb。恰巧aa的int值也就是地址值和cc相等,可是bb在cc所指向的对象分配的内存中间部分,它的地址值与cc是不等的

被折叠的 条评论
为什么被折叠?



