1.类的继承与派生
- 类的继承:从已有类产生新类的过程。原有类称为基类或父类,产生的新类称为派生类或子类。
- 派生类语法:
class 派生类名:继承方式 基类名1,继承方式 基类名2,...
{
}
- 单继承和多继承:基类个数决定
- 直接基类,间接基类
- 继承方式规定了如何访问从基类继承的成员
- 派生类成员是指除了从基类继承的所有成员之外,新增加的数据和函数成员
- 派生类生成过程:吸收基类成员->改造基类成员->添加新的成员,构造函数和析构函数都不被继承
2.访问控制
- public:继承后,基类数据为public
- protected:继承后,基类数据为protected
- private:继承后,基类数据为private
3.类型兼容性规则:指在需要基类的任何地方,都可以使用公有派生类的对象来代替(公有继承)
- 代替包含以下情况
* 派生类的对象可以隐含转换为基类对象
* 派生类对象可以初始化基类的引用
* 派生类的指针可以隐含转换为基类指针
- 在代替之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员
4.派生类的构造和析构函数
- 构造函数:
派生类构造函数执行的一般次序
* 调用基类构造函数,调用顺序按照他们被继承时声明的顺序
* 对派生类新增的成员对象初始化,调用顺序按照他们在类中声明的顺序
* 执行派生类的构造函数体中的内容
- 复制构造函数:默认会调用基类的复制构造函数,然后对派生类新增的成员对象一一执行复制
- 析构函数:声明方法与没有继承关系的类中析构函数的声明方法完全相同,只要在函数体中负责把派生类新增的非对象成员进行清理。执行次序与构造函数正好相反。
5.派生类成员的标识与访问
- 派生类中成员按照访问属性划分为4种:不可访问的成员,私有成员,保护成员,共有成员
- 作用域分辨符::
- 如果派生类中声明了与基类成员函数同名的新函数,即使函数的参数表不同,从基类继承的同名函数的所有重载形式也都会被隐藏
- 通过作用域分辨符可以唯一标识派生类中由基类所继承的成员,解决成员被隐藏的问题
- 虚基类:virtual关键字修饰继承,语法:class 派生类名:virtual 继承方式 基类名;此时内存中只会有一个虚基类的成员。
- 构造一个类的对象的一般顺序是:
* 如果该类有直接或间接虚基类,则先执行虚基类的构造函数
* 如果该类有其他基类,按照其继承声明列表中出现的次序,分别执行他们的构造函数,但构造过程中,不再执行他们的虚基类的构造函数
* 按照在类定义中出现的顺序,对派生类中新增的成员对象进行初始化
* 执行构造函数的函数体
来源:https://www.cnblogs.com/Mr-ox/p/6475928.html