继承作为C++三大特性之一,有着举足轻重的地位。
下面是关于继承的一些知识点,可以帮助我们更好地学习和理解继承!!
1. 继承的本质:代码复用
2. 继承和派生
3. 派生类继承了基类的什么?
派生类继承了基类除构造函数和析构函数以外的所有成员
4. 派生类的内存布局
如下图,base为基类,derive为派生类,派生类的内存布局如右边图形所示:
- 在命令界面查看C++类的内存布局:
命令格式如下:
cl –d1reportSingleClassLayout[classname] xxx.cpp
classname 为类名,xxx.cpp为源代码文件名
- 派生对象的生成过程:
(1)开辟内存 < 基类 + 派生类总内存 >
(2)对内存空间初始化:
① 系统调用基类构造函数(为默认的构造函数,因为基类的构造函数未被继承)
② 系统调用派生类的构造函数 (优先构造基类)
5. 派生类的构造和析构顺序
(1)基类的构造优先级 > 派生类
首先调用基类的构造,再调用派生类的构造
(2)类的析构优先级 < 派生类
首先调用派生类的析构,再调用基类的析构
6. 继承方式
(1)继承方式
public protected private
(2)访问限定符:
public: 在任意位置可见
protected: 在本类类中和子类中可见
private: 在本类类中访问
(3)基类中不同的访问限定符下的成员以不同的继承方式继承,在派生类中的访问限定:
基类 /继承方式 | public | protected | private |
public | public | protected | 不可访问 |
protected | protected | protected | 不可访问 |
private | private | private | 不可访问 |
7. 类和类关系
(1)组合关系 a part of has_a <私有继承>
(2)继承关系 a kind of is_a <公有继承(保护继承)>
(3)代理关系 容器适配器
8. 同名函数的关系
关系 | 介绍 | 特点 |
重载(overload) | 有相同的名称,但是参数列表不相同,即函数重定义 |
重载三要素: ① 同名 ② 不同参 ③ 同作用域 |
隐藏(overhide) | 派生类中同名的函数隐藏了基类所有同名的函数 | ① 继承 不同作用域 ② 同名 |
覆盖(override) | 派生类中同名同参的虚函数覆盖了基类中同名同参的虚函数,即重写 |
① 继承 不同作用域 ② 虚函数 |
9. 基类和派生类指针或引用的相互关系
(1)允许基类的指针或者引用指向或者引用派生类对象
(2)不允许派生类的指针或者引用指向或者引用基类对象