编程语言——C++的对象模型

来源:互联网 发布:可口可乐的销售数据 编辑:程序博客网 时间:2024/06/16 15:14

C++ 结构体和类

对象本质上就是一块存储空间,

A(对象大小) => B(对象成员)A -> C(空类、对齐)A -> D(继承、虚函数)B -> E(虚函数表)B -> F(父类数据成员)

在c语言转化为汇编语言的过程中,转化并不是自主产生的,不是一一映射,而是在编译器的解释下完成的,意识到这一点很重要。

this指针相当于一个基地址,而成员变量都是在该地址上的偏移。

构造函数与析构函数

对象的分类
- 局部对象
- 堆对象
- 参数对象
- 返回对象
- 全局对象
- 静态对象

虚函数

对象的多态性需要通过虚表和虚指针来完成。

虚表是一个存储虚函数指针的表,它的指针存放在对象空间的前4个字节!

有时需要考虑一下 C++语言使用者(程序员)、编译器、汇编语言三者之间的关系,理清它们的关系,对理解C++语法有很大的帮助。
首先,程序员 A 是需求方,A 说:我需要面向对象多态的特性;
编译器,是问题方案的提供方,复杂想办法解决问题;
汇编语言是最终的运行环境,或者说目标,汇编语言的语法是固定不变的,它不会为了A的需求做任何的变动。

编译器,思来想去,想来思去,提出了虚指针的方案!

类成员函数,在编译时,编译器就可以知道相对固定的地址,所以转换为汇编语言也相对容易。object.method 调用时,编译器很容易知道这是调用的哪个类的哪个函数。而当 object.value 时,由于内存空间还没有分配,所以编译器只能知道一个相对偏移。

原创粉丝点击