1、继承和派生的基础概念
继承指从现有类获得其特性,派生指从已有类产生新的类。原有的类称为基类或父类,新生的类称为子类或派生类。当子类只有一个父类时称为单继承,当子类含有多个父类时称为多继承。如果基类A直接参与了派生类B的派生过程,那么A类称为直接基类;基类的基类称为间接基类。
2、如何定义子类
定义子类时,需要指明其父类,及对父类的继承方式(public、private、protect):
class
子类不仅继承父类的全部成员,还要定义新的数据成员和函数成员,新增的成员称为子类成员(或称为派生类成员)。
3、吸收和改造父类成员、添加新成员
在子类继承父类的过程中,有下面个要点:
- 子类继承父类除去构造函数和析构函数外所有的成员;
- 子类改造从父类继承来的成员,包括访问控制、覆盖和隐藏;
- 添加父类没有的新成员;
下面定义的Animal类,作为Duck类的父类,具体定义如下:
class
上述代码中,对应三个过程如下:
(1)吸收:Duck类继承了Animal类除去构造和析构函数外的所有成员,所以Duck类对象可以使用Animal类的run()函数:
duck
(2)改造:Duck类定义了和父类同名同返回类型同参数的eat()函数,属于函数的覆盖(如果返回类型和参数表不同属于重载),直接使用函数名访问的是Duck类的eat()函数,称为同名隐藏:
duck
(3)添加:添加普通函数成员和数据成员的语法与一般类添加成员时相同,难点在于构造函数和析构函数,因为子类涉及到父类的构造函数和析构函数。