C++存在构造函数与析构函数,继承中也存在构造和析构函数。继承中的构造和析构函数与普通的构造析构有细微差别。
赋值兼容性原则
1 |
|
- 子类对象可以当作父类对象使用
- 子类对象可以直接赋值给父类对象
- 子类对象可以直接初始化父类对象
- 父类指针可以直接指向子类对象
- 父类引用可以直接引用子类对象
总结:子类就是特殊的父类 (base *p = &child;
)
继承中的对象模型
- 类在C++编译器的内部可以理解为结构体
- 子类是由父类成员叠加子类新成员得到的
继承中构造和析构
- 在子类对象构造的时,需要调用父类构造函数对其继承得来的成员进行初始化
- 在子类对象析构的时,需要调用父类析构函数对其继承得来的成员进行清理
继承中的构造析构调用原则
1 | class Parent |
- 子类对象在创建时会首先调用父类的构造函数
- 父类构造函数执行结束后,执行子类的构造函数
- 当父类的构造函数有参数时,需要在子类的初始化列表中显示调用
- 析构函数调用的先后顺序与构造函数相反
继承与组合混搭情况下,构造和析构调用原则
1 |
|
原则:先构造父类,再构造成员变量、最后构造自己;先析构自己,在析构成员变量、最后析构父类。先构造的对象,后释放
继承中的同名成员变量处理方法
- 当子类成员变量与父类成员变量同名时
- 子类依然从父类继承同名成员
- 在子类中通过作用域分辨符::进行同名成员区分
- 同名成员存储在内存中的不同位置