下面程式輸出結果是多少?
阿新 • • 發佈:2019-02-12
輸出結果為:#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指向的物件)的部分,這個是同一部分,也就顯示相等了。