04.继承与派生
继承与派生
1 | class 派生类名: public 基类名 { |
-
派生类对象的内存空间
- 派生类对象的体积等于基类对象的体积, 再加上派生类对象自己的成员变量的体积. 在派生类对象中, 包含着基类对象, 而且基类对象的存储位置位于派生类对象新增的成员变量之前
-
派生类中和基类同名同参数表的方法 – 覆盖 (不是重载)
复合关系和继承关系
-
复合关系
- 类C中 “有” 成员变量k, k是类D的对象, 则C和D是复合关系
- 一般逻辑上要求: D对象是C对象的固有属性或组成部分
- 不能循环定义(我中有你, 你中有我)
基类/派生类同名成员和protected访问范围说明符
-
基类的 private成员 可被下列函数访问
- 基类的成员函数
- 基类的友元函数
-
基类的 public成员 可被下列函数访问
- 基类的成员函数
- 基类的友元函数
- 派生类的成员函数
- 派生类的友元函数
- 其他函数
-
基类的 protected成员 可被下列函数访问
-
基类的成员函数
-
基类的友元函数
-
派生类的成员函数可以访问当前对象的基类的保护成员 (绕)
-
派生类的构造函数
-
派生类对象包含基类对象
-
执行派生类构造函数之前, 先执行基类的构造函数
-
派生类交代基类初始化
1
2
3构造函数名(形参表): 基类名(基类构造函数实参表) {
...
} -
调用基类构造函数的两种方法
- 显式方式
- 如上
- 隐式方式
- 派生类的构造函数中, 省略基类构造函数时
- 派生类的构造函数, 自动调用基类的默认构造函数
- 显式方式
-
派生类的析构函数被执行时, 执行完派生类的析构函数后, 自动调用基类的析构函数
-
派生类包含成员对象时, 先执行基类构造函数, 再执行成员对象类构造函数, 最后执行自己的构造函数
-
析构函数调用顺序相反
public继承的赋值兼容规则
-
public继承下
-
派生类对象可以赋值给基类对象
-
派生类对象可以初始化基类引用
-
派生类对象的地址可以赋值给基类指针
-