3.继承与派生

只愿长相守 提交于 2019-12-18 15:18:19

1.类的继承与派生

  - 类的继承:从已有类产生新类的过程。原有类称为基类或父类,产生的新类称为派生类或子类。

  - 派生类语法:  

    class 派生类名:继承方式   基类名1,继承方式  基类名2,...

    {

    }

  - 单继承和多继承:基类个数决定

  - 直接基类,间接基类

  - 继承方式规定了如何访问从基类继承的成员

  - 派生类成员是指除了从基类继承的所有成员之外,新增加的数据和函数成员

  - 派生类生成过程:吸收基类成员->改造基类成员->添加新的成员,构造函数和析构函数都不被继承

2.访问控制

  - public:继承后,基类数据为public

  - protected:继承后,基类数据为protected

  - private:继承后,基类数据为private

3.类型兼容性规则:指在需要基类的任何地方,都可以使用公有派生类的对象来代替(公有继承)

  - 代替包含以下情况

    * 派生类的对象可以隐含转换为基类对象

    * 派生类对象可以初始化基类的引用

    * 派生类的指针可以隐含转换为基类指针

  - 在代替之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员

4.派生类的构造和析构函数

  - 构造函数:

    派生类构造函数执行的一般次序

    * 调用基类构造函数,调用顺序按照他们被继承时声明的顺序

    * 对派生类新增的成员对象初始化,调用顺序按照他们在类中声明的顺序

    * 执行派生类的构造函数体中的内容

  - 复制构造函数:默认会调用基类的复制构造函数,然后对派生类新增的成员对象一一执行复制

  - 析构函数:声明方法与没有继承关系的类中析构函数的声明方法完全相同,只要在函数体中负责把派生类新增的非对象成员进行清理。执行次序与构造函数正好相反。

5.派生类成员的标识与访问

  - 派生类中成员按照访问属性划分为4种:不可访问的成员,私有成员,保护成员,共有成员

  - 作用域分辨符::

  - 如果派生类中声明了与基类成员函数同名的新函数,即使函数的参数表不同,从基类继承的同名函数的所有重载形式也都会被隐藏

  - 通过作用域分辨符可以唯一标识派生类中由基类所继承的成员,解决成员被隐藏的问题

  - 虚基类:virtual关键字修饰继承,语法:class  派生类名:virtual  继承方式  基类名;此时内存中只会有一个虚基类的成员。

  - 构造一个类的对象的一般顺序是:

    * 如果该类有直接或间接虚基类,则先执行虚基类的构造函数

    * 如果该类有其他基类,按照其继承声明列表中出现的次序,分别执行他们的构造函数,但构造过程中,不再执行他们的虚基类的构造函数

    * 按照在类定义中出现的顺序,对派生类中新增的成员对象进行初始化

    * 执行构造函数的函数体

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!