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.存在虚函数中,每个对象都有一个指向虚函数表的指针

 

 

 

 

 

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