Cpp 对象模型探索 / 单一继承的类的内存布局
生活随笔
收集整理的這篇文章主要介紹了
Cpp 对象模型探索 / 单一继承的类的内存布局
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
1、父類和子類都沒有虛函數
2、父類有虛函數、子類沒有虛函數
3、父類沒有虛函數,子類有虛函數
4、父類和子類都有虛函數
5、總結
#include <iostream> class Base { public:int bi_;int bk_; };class A : public Base { public:int i_; };int main() {A aobj;aobj.bi_ = 1;aobj.bk_ = 2;aobj.i_ = 3;return 0; }
1、父類和子類都沒有虛函數
運行上述代碼,查看內存地址:
?內存布局圖如下:
2、父類有虛函數、子類沒有虛函數
在 Base 類中加入虛函數,查看內存地址如下:
紅框部分即為虛函數表指針 vptr,內存布局圖如下:?
3、父類沒有虛函數,子類有虛函數
在 A 類中加入虛函數,查看內存地址如下:
紅框部分即為虛函數表指針 vptr,內存布局圖如下:??
4、父類和子類都有虛函數
在 Base 類和 A 類中均加入虛函數,查看內存地址如下:
紅框部分即為虛函數表指針 vptr,內存布局圖如下:???
拓展:子類的虛函數表中共有兩項,依次如下:
(1)父類的虛函數的首地址。
(2)子類虛函數的首地址。?
5、總結
? ? ? 對于單一繼承的類,無論父類還是子類誰有虛函數,子類對象的虛函數表指針均位于該對象模型的首地址的位置。
?
(SAW:Game Over!)
總結
以上是生活随笔為你收集整理的Cpp 对象模型探索 / 单一继承的类的内存布局的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cpp 对象模型探索 / 类引入虚函数有
- 下一篇: C/Cpp / 类中静态成员变量和普通成