為什么C++中只有指針和引用才能實現多態?
類似代碼如下:class A
{
public:
virtual void Test(){}
};
class B:public A
{
public:
virtual void Test(){}
};
B b;
A a = b;
A * pA = &b;
a.Test();
pA->Test();
大家都知道a.Test調用的是A::Test,而pA->Test調用的是B::Test,那么為什么呢?
首先來看a.Test;其實很容易理解,這里的a就是一個A類型的變量,它的內存布局在賦值的時候已經從B轉換到A了,多于的數據都被丟棄,因此其就是一個A類型的變量。
而對于pA來說,其是一個指針,其類型雖然是A,但指向的區域的內容卻是一個B類型的內存結構,雖然內存結果的布局與A兼容,但其虛函數表中的Test卻是B的實現;因此如上面所說。同樣引用也會達到如此的效果。
我想這就是所說的指針和引用不會引發內存中任何“與類型有關的內存委托操作”吧。
posted on 2011-04-06 21:27 笨笨 閱讀(3945) 評論(8) 編輯 收藏 引用 所屬分類: 代碼優化