多態的意思為“以一個public基類的指針/引用,尋址一個派生類對象”。
“多態”的關鍵在于通過基類指針或引用調用一個虛函數時,編譯時不確定到底調用的是基類還是派生類的函數,運行時才確定。這是如何實現的呢?
請看下面的程序,該程序演示了多態類對象存儲空間的大小。
#include <iostream>using namespace std;class A{public:int i;virtual void func() {}virtual void func2() {}};class B : public A{int j;void func() {}};int main(){cout << sizeof(A) << ", " << sizeof(B); //輸出 8,12return 0;}
在 32 位編譯模式下,程序的運行結果是:
8, 12
如果將程序中的 virtual 關鍵字去掉,輸出結果變為:
4, 8
對比發現,有了虛函數以后,對象所占用的存儲空間比沒有虛函數時多了 4 個字節。實際上,任何有虛函數的類及其派