1. 程式人生 > >下面程式輸出結果是多少?

下面程式輸出結果是多少?

#include<iostream>
using namespace std;
class A{
	int m;
};

class B{
	int n;
};

class C:public A,public B{
	int k;
};

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;
}
輸出結果為:

equal

not equal

(見程式設計師面試寶典P150)

分析:

if(pC==pB)

這裡兩端的資料型別不同,比較時需要進行隱式轉換,即pC==pB相當於:pC==(C*)pB

pB實際上指向的地址是物件C中父類B部分,從地址上跟pC不一樣,所以直接比較地址數值的時候是不相等的。但是當進行pC==pB比較時,實際上是比較pC指向的物件和(C*)隱式轉換pB後pB指向的物件(pC指向的物件)的部分,這個是同一部分,也就顯示相等了。