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.存在虛函數中,每個對象都有一個指向虛函數表的指針