《深入理解C++对象模型》读书笔记(一)
来源:互联网 发布:海军上将拉托雷 知乎 编辑:程序博客网 时间:2024/05/16 14:02
1、 C++类对象模型的中包括非静态成员变量和虚函数表指针,其他静态成员变量和成员函数均放在对象模型之外,所有的对象示例均可以共同使用。如此可以节省访问的时间和空间效率。
2、 虚继承是为了解决多重继承中出现公共的基类出现二义性。
class A;
classB1:public virtual A;
classB2:public virtual A;
classD:public B1,public B2;
3、 虚函数实现多态性,即通过基类指针来访问其他派生类中的同名函数。实现动态运行时绑定。
4、 转型cast不能改变指针所含的真正地址,它只影响被指出地址的内存的大小和其内容。例如将空指针转型成其他指针。
5、 对于一个类,若其中没有用户定义的构造函数,则编译器会暗中生成一个默认的构造函数,主要有四种情况:A:有默认构造函数的成员类对象;B:含有默认构造函数的基类;C:带有虚函数的类,主要是为了正确初始化虚函数表的值;D:含有虚基类,处理操作虚基类的指针。
有几个原则:1、若类显示定义了任何构造函数,则编译器不会生成默认构造函数;2、编译器合成的默认构造函数,并不会明确给类中每一个数据成员一个默认的值。
6、 复制构造函数常用于将一个对象的值赋给另外一个对象,有三种情形:1、对一个对象用另一个对象做初始化;2、把对象作为参数传递给一个函数;3、把对象作为函数的返回值。
四种情况下,需要编译器产生复制构造函数:
后两种情况主要是因为存在虚函数表指针需要考虑。
7、 初始化列表:初始化顺序仅与声明顺序有关。充分利用初始化列表可以提高程序的运行效率。
8、 函数的重载(overload)、覆盖(override)、隐藏:重载出现在同一个类中的不同成员函数之间,一般函数名相同,参数类型或个数不同;覆盖也叫重写,值得是基类和派生类之间,基类的虚函数被派生类同名且参数相同的函数重写,覆盖掉;隐藏也是指基类和派生类之间,同名但参数不同的函数之间,若同名且参数相同,且基类无virtual关键词,则基类的函数都会被子类隐藏。
9、 空类的大小为1字节,编译器需要在类中插入一个char字节,使得类在内存中具有独一无二的地址。
10、 类的大小与以下几个因素有关:非静态成员变量、虚继承、基类的非静态成员变量。
11、 同一个访问级别(public/private/protect)中的元素在内存中排列顺序与声明顺序一样,
12、 对静态成员变量的访问,通过指针和对象访问效果均一样,但针对非静态成员变量,需要通过获得起始位置的偏移量来访问。虚拟继承会导致对成员变量的访问增加间接性,效率降低。
- 《深入理解C++对象模型》读书笔记(一)
- 深入C++对象模型读书笔记(一、关于对象)
- 《深入理解C++对象模型》读书笔记(二)
- 《深入理解c++对象内存模型》读书笔记
- 读书笔记《深入理解C++对象模型》
- 深入理解java虚拟机读书笔记(一)
- 深入理解java虚拟机(读书笔记一)
- 《深入理解Bootstrap》读书笔记(一)
- 【读书笔记】《深入理解c#》(1)
- 【深入PHP 面向对象】读书笔记(一)
- c深入理解(一)
- 深入理解C#(一)
- 深入理解Java内存模型(一)
- 《深入理解计算机系统》读书笔记一
- 深入探索C++对象模型 读书笔记(1)
- c++对象模型读书笔记一
- C++对象模型读书笔记(一)
- 深入理解面向对象原理(一)
- YUV转RGB常用函数
- Android Smart Image View
- Linux用户模式和内核模式
- Ubuntu系统修改源和替换软件源的方法
- 安装Android studio出现'tools.jar' seems to be not in Android Studio classpath......的解决方法
- 《深入理解C++对象模型》读书笔记(一)
- hibernate pojo注解详解
- STL学习笔记(二)
- EF_CodeFirst
- Task '' not found in root project '***'.
- Qt以及Qt Designer怎样加入资源文件
- Unity3d UI渐隐渐显
- [Android Debug]aapt.exe'' finished with non-zero exit value 1
- MongoDB基本使用