#include <iostream>
using namepsace std;
int main()
{
C * pC = new C;
B * pB = dynamic_cast<B*>(pC);
A * pA = dynamic_cast<A*>(pC);
if(pC == pB)
{
cout << "equal" << endl;
}
else
{
cout << "not equal" << endl;
}
if(int(pC) == int(pB))
{
cout << "equal" << endl;
}
else
{
cout << "not equal" << endl;
}
return 0;
}
这是《程序员面试宝典》里的一道题,问你输出什么
分析:从int main下面开始逐句分析,首先定义一个对象指针pC指向一个按类C结构初始化后的空间。同时定义父类指针pB和pC并使他们获得在pC指向的空间自己的首地址,此时假设pC指向的对象地址为0x3d3dd8,由于B是C的父类,因此pB并不知道pC所有的成员,所以pB指向的那段空间应该是C从B继承的那个成员首地址开始,0x3d3ddC。但是pB == pC在比较时发生隐式转换,少空间向多空间扩展,即(C *)pB == pC,两者相等,输出equal,同理。由于第二个强化类型转换,所以是not equal