C++对象模型

class的成员分类

  • 成员变量分为:静态和非静态。
  • 成员函数:静态、非静态以及虚拟(virtual)

C++对象的存储

  • 非静态成员变量
  • vptr (若存在虚函数)
    (其余都在class object之外(包括静态成员变量、静态或非静态成员函数)

C++ vitual function 的支持

  • 每一个class产生一个虚表。虚表里存放的是志向虚拟函数的指针。第一个slot存放的是type_info object(用以支持runtime type identification)
  • 每一个class object被添加一个指针,指向相关的虚表,这个指针为vptr。
    vptr的set,reset都由每一个class的constructor,destructor以及copy assigment自动完成。
  • runtime如何动态绑定???

指针

  • 一个指针存放的是内存地址,
  • 指针类型会教导编译器如何解释某个特定地址中的内存内容以及大小
  • 一个类型为void*的指针只能够含有一个地址,而不能通过它操作所指的object的缘故

所以,转型(cast)其实是一种编译器指令,大部分情况下它并不改变一个指针所含的真正地址,它只影响“被指出之内存的大小和其内容”的解释方式

(未完待续)

constructor

Default constructor

  • 若developer 没有实现任何constructor??编译器自动完成 (为了满足编译的需求,而不是满足实现)
    • 若是一个子类,则默认构造函数首先会调用父类的默认构造函数
  • Developer实现了constructor,则编译器也会调用父类的构造函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值