C++對象模型分析

class是一種特殊的struct

1.在內存中class依舊可以看做變量的集合

2.class與struct遵循相同的內存對齊規則

3.class中的成員函數與成員變量是分開存放的

----每個對象有獨立的成員變量

----所有對象共享類中的成員函數

struct B{

int i;
int j;
char c;//這裏會內存對齊到int類型大小
double d;

};------》(sizeof(B)=20)

class A{

int i;
int j;
char c;
double d;

public :

void print(){}

};------->其大小也爲20



int main(){

A a;
B* p=reinterpret_cast<B*>(a);



}

運行時的對象退化成結構體的形式:

1.所有的成員變量在內存中依次排布

2,成員變量間可能存在內存間隙

3.訪問權限運行時失效

4.可以通過內存地址直接訪問成員變量

5.類中的成員函數位於代碼段中

6.調用成員函數時對象地址訪問成員變量

7.C++語法規則隱藏了對象地址的調用過程

 

繼承的對象模型分析:

繼承發生後子類的代碼塊會加在父類的代碼塊後面

C++多態實現原理:

  1.當類中聲明虛函數時,編譯器會在類中生成一個虛函數

  2.虛函數表是一個存儲成員函數地址的數據結構

  3.虛函數表是由編譯器自動生成與維護的

   4.virtual成員函數會被編譯器放入虛函數表中

   5.存在虛函數中,每個對象都有一個指向虛函數表的指針

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章