C++提供继承的实际目的是为了在不同的类型实体之间提取共性,提高代码的重用率,并且可以灵活的对基类根据实际的使用场景进行改造设计。通常将用于继承的类称为父类,也叫基类,用于为继承提供源头。从父类继承出来的类称为子类,也可以称为派生类。一个子类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的基类的继承称为单继承;从多个基类派生的继承称为多继承。
继承形式: 单继承
多继承
继承方式: 公有继承
私有继承
保护继承
公有继承 :
父类的公有成员(public)和保护成员(protected)都被子类继承,并且这些成员的属性保持不变,在子类中也可以访问父类的公有或保护成员。
父类的私有成员(private)没有被子类继承,不能在子类中访问父类私有成员。
父类成员对于子类----公有和保护成员可以访问
父类成员对于子类对象----只能访问公有成员
私有继承:
父类公有成员和保护成员都作为子类的私有成员,不能被这个子类的对象访问
保护继承:
父类的所有公有成员和保护成员都降级成为子类的保护成员,只能被它的子类成员函数或友员访问
父类的私有成员仍为私有,子类对象不可以直接访问父类的成员
继承的构造函数与析构函数:
子类对象能够成功实例的前提条件是父类要存在,因此在实例子类对象时,系统首先会调用父类的构造函数,将父类对象相关成员明确后,才可以被子类对象使用。我们看到的结果是先调用父类的构造函数,再是子类的构造函数。
子类对象能够成功实例的前提条件是父类要存在,因此在实例子类对象时,系统首先会调用父类的构造函数,将父类对象相关成员明确后,才可以被子类对象使用。我们看到的结果是先调用父类的构造函数,再是子类的构造函数。
析构函数是释放资源,因为子类对象是独立的,没有哪个对象依赖它,可以先释放,但是父类对象不同,子类对象依赖它,所以在没有释放子类对象之前不能释放父类对象。析构函数调用顺序与构造函数调用顺序相反。
虚继承:
虚继承主要用来解决多继承时可能发生对同一父类基层多次而产生的二义性问题。为最远的子类提供唯一的父类成员,而不重复产生多次复制。我们在编程时,多个子类继承自同一父类时,将继承方式指定为虚继承(在继承方式前加关键字virtual)即可,此时的父类称为虚基类(父类)。