offset策略
在虚函数表中放置虚基类的offset.

文章插图
Function语义学
虚函数
基类的指针或者引用寻址出一个子类对象 , 虚函数分配表格索引 , vptr指向virtual table, virtual table中存放虚函数指针.
inline函数
inline是一个请求 , 编译器解说就必须认为它用一个表达式合理的将这个函数扩展开来 , 扩展期间使用实参代替形参 , 局部变量在封装的区域内名字唯一.
函数的调用方式
- 非静态成员函数
- 改函数签名安插this指针 , 变为一个非成员函数 , 可以使类对象调用.
- 调用对非静态成员的存取有this指针完成
- 通过name-maping 改为一个外部函数
- 静态成员函数 被转为非成员函数 , 不能访问非静态成员没有this指针
- 虚成员函数 (*ptr->vptr[1])(ptr) 通过拿到徐表中虚函数地址传入this指针来调用
构造函数的扩充
顺序: 先父类后成员最后自己的调用方式.
vptr的初始化在所有base 类构造之后 , 初始化列表之前(程序代码)
- 虚基类的构造函数被调用从左到右从深到浅
- 基类的构造函数被调用 , 按照基类的生命顺序
- 设置vptr的指针初值 , 初始化虚函数表
- 成员函数的初始化列表被放在构造偶函数内部以成员类的声明顺序,么有构造函数则调用合成的默认的构造函数
- 构造自己 , 执行user code
按照上面相反的顺序调用 先自己析构然后类成员对象析构然后重置vptr然后基类析构然后虚基类析构
拷贝构造
拷贝构造函数和拷贝复制运算符
推荐阅读
- 什么是盒子模型?盒子模型有哪些属性
- JSON对象和JSON字符串的相互转换
- javascript中的navigator对象和screen对象
- javascript内置对象之数学函数Math的常用方法
- 梦到对象被杀是什么意思 梦见对象杀我什么意思
- 蒙顶山茶成大学生暑期实践关注对象
- 买紫砂就像找对象
- javascript内置对象Date的基本用法
- OSS对象存储和CDN傻傻分不清?
- 有女朋友却梦见和别人在一起 梦见自己对象和别的女的在一起了
