本书是一部介绍C++对象模型知识的书,意在探究C++幕后的秘密,讲述C++编译器的故事。内容涉及很多不被常人所知的C++对象内部工作原理以及底层的一些具体实现机制方面的知识。
本书共分为7章:
第1章介绍书中范例所涉及的演示环境搭建、如何创建基本的C++程序,以及对程序进行跟踪和断点调试的方法。
第2章的主题是对象,包括以对象所占内存大小为讲解切入点详述对象结构的发展和演化; 构造、拷贝构造、移动构造函数语义; 深浅拷贝、成员初始化列表等内容。
第3章的主题是虚函数,包括虚函数表指针、虚函数表的概念和细节; 更进一步涉及多重继承的虚函数表分析和各种辅助工具的讲解。
第4章的主题是数据语义学,包括类中的数据成员布局、数据成员存取,涉及单一继承、单类单继承、多重继承等情况下的数据成员布局; 二层、三层结构时虚基类表内容、与this指针调整等问题。
第5章的主题是函数语义学,包括普通成员函数、虚函数、静态成员函数调用方式; 静态、动态绑定以及多态性的详细体现分析和析构函数必须是虚函数原因的着重解释; 多重继承第二虚基类详谈、RTTI实现原理、inline函数细说等内容。
第6章的主题是对象构造语义学,包括对象构造顺序,对象复制、析构函数语义; 局部、全局对象的构造和析构,临时对象详细探讨等内容。
第7章的主题是模板实例化语义学,重点对模板的实例化进行了详细的分析。
这是一本C++进阶类图书,要求学习者具备一定的C++开发基础,适合作为C++编程人员的参考读物。
"书中主题 C++对象知识:对象结构的发展及演化、所占空间、各种构造函数的语义等、成员初始化列表等。 C++虚函数:虚函数表、虚函数表指针、多重继承虚函数表分析、辅助工具介绍等。 C++数据语义:数据成员布局和存取、多种继承关系下数据成员的布局、多层继承结构时虚基类表内容分析、this指针调整等。 C++函数语义:成员函数调用方式、静态动态绑定、多态性体现、虚析构函数成因剖析、inline函数详解等。 C++对象构造语义:对象构造顺序、对象复制及析构语义、局部和全局对象的构造与析构,临时对象、模板实例化等。 环境标准 程序可以运行在Visual Studio、g++编译环境。书中全部实例通过Visual Studio 2019编译环境演示、部分实例也通过g++进行差异化演示。
王健伟 男,1976年9月生,网名狂想(KuangXiang),1995年毕业于哈尔滨工程大学计算机及应用专业,拥有20多年软件开发经验,参与开发过数十个实际项目,涉及网络通信、网络安全、网络游戏等领域,具备极其深厚的软件开发实战经验。曾参与创办深圳知名网络安全公司安络科技有限公司,是中国首套网络安全在线扫描评估系统项目负责人、 同服独立游戏《冒险之路》制作人。
第1章 演示环境介绍和准备
1.1 演示环境搭建说明
1.2 创建 基本的能运行的C++程序
1.3 Visual Studio中程序的调试方法
第2章 对象
2.1 类对象所占用的空间
2.2 对象结构的发展和演化
2.3 this指针调整
2.4 分析obj(目标文件)与构造函数语义
2.5 拷贝构造函数语义与移动构造函数语义
2.5.1 拷贝构造函数语义
2.5.2 移动构造函数语义
2.6 程序转换语义
2.6.1 定义时初始化对象
2.6.2 参数的初始化
2.6.3 返回值初始化
2.7 程序的优化
2.7.1 从开发者层面的优化
2.7.2 从编译器层面的优化
2.8 程序优化续、拷贝构造函数续与深浅拷贝
2.8.1 程序优化续
2.8.2 拷贝构造续
2.8.3 深浅拷贝
2.9 成员初始化列表
2.9.1 何时必须用成员初始化列表
2.9.2 使用初始化列表的优势
2.9.3 初始化列表的细节探究
第3章 虚函数
3.1 虚函数表指针位置分析
3.2 继承关系作用下虚函数的手工调用
3.3 虚函数表分析
3.4 多重继承虚函数表分析
3.5 辅助工具与vptr、vtbl创建时机
3.5.1 使用辅助工具查看虚函数表
3.5.2 虚函数表的创建时机
3.6 单纯的类不纯时引发的虚函数调用问题
第4章 数据语义学
4.1 数据成员绑定时机
4.1.1 成员函数函数体的解析时机(整个类定义完毕后)
4.1.2 成员函数参数类型的确定时机( 近碰到原则)
4.2 进程内存空间布局
4.3 数据成员布局
4.3.1 观察成员变量地址规律
4.3.2 边界调整与字节对齐
4.3.3 成员变量偏移值的打印
4.4 数据成员的存取
4.4.1 静态成员变量的存取
4.4.2 非静态成员变量的存取
4.5 单一继承下的数据成员布局
4.6 单类单继承虚函数下的数据成员布局