【面向对象编程】C++的对象模型与虚指针

C++ 结构体和类

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

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

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

构造函数与析构函数

对象的分类

  • 局部对象
  • 堆对象
  • 参数对象
  • 返回对象
  • 全局对象
  • 静态对象

虚函数

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值