class B { } class C : public B { } class D : public B { } D* pD = new D();//pD的靜態類型是它聲明的類型D*,動態類型也是D* B* pB = pD;//pB的靜態類型是它聲明的類型B*,動態類型是pB所指向的對象pD的類型D* C* pC = new C(); pB = pC;//pB的動態類型是可以更改的,現在它的動態類型是C*
class B { void DoSomething(); virtual void vfun(); } class C : public B { void DoSomething();//首先說明一下,這個子類重新定義了父類的no-virtual函數,這是一個不好的設計,會導致名稱遮掩;這里只是為了說明動態綁定和靜態綁定才這樣使用。 virtual void vfun(); } class D : public B { void DoSomething(); virtual void vfun(); } D* pD = new D(); B* pB = pD;