結果為: AA::fun() BB::fun() C++的多態分為靜態多態和動態多態。 靜態多態:靜態多態就是重載,因為是在編譯期決議確定。也就是在編譯的時候就能確定函數的地址。 動態多態:是通過繼承重寫基類的虛函數實現的多態,在運行期間決議確定。也就是編譯期間不知道函數的地址,只知道存儲函數地址的虛表的地址。 C++中多態的實現就是通過虛函數實現的,虛函數的對象實例中都存在一張虛函數表。
虛函數表是通過一塊連續內存來存儲虛函數的地址,指明了實際調用的虛函數指針。
class AA{public: virtual void fun1() {} virtual void fun2() {}PRotected: int _a;};void Test2(){ AA a;} 通過監視窗口可以看到,對象a的首部存儲了一個地址,指向的空間存儲了虛函數的地址,稱為虛函數表。所以sizeof(a)的值為8。
通過這種方式,可以依次打印出虛表地址以及虛函數的地址,結果如下:
虛表后面的0標志著虛表結束,類似于字符串結束符“/0”。
新聞熱點
疑難解答