13.1 一个简单的基类
从一个类派生出另一个类时,原始类称为基类,继承类称为派生类
- 派生类对象存储了基类的数据成员
- 派生类对象可以使用基类的方法
- 派生类需要自己的构造函数
- 派生类可以根据需要添加额外的数据成员和成员函数
- 派生类不能直接访问基类的私有成员,而必须通过基类方法进行访问
- 派生类对象过期时,首先调用派生类的析构函数,再调用基类析构函数
派生类构造函数
- 首先创建基类对象
- 派生类构造函数应该通过成员初始化列表将基类信息传递给基类构造函数
- 派生类构造函数应初始化派生类新增的数据成员
- 派生类的构造函数可以使用初始化列表机制将值传递给基类的构造函数
derived::derived(type1 x, type2 y): bass(x,y);
派生类和基类之间有一些特殊关系
- 派生类对象可以使用基类的方法,条件是方法不是私有的
- 基类指针可以在不进行显式类型转换的情况下指向派生类对象,基类引用可以在不进行显式类型转换的情况下引用派生类对象
- 基类指针或引用只能用于调用基类方法,C++要求引用和指针类型与赋给的类型匹配,但这一规则对继承来说是例外。然而,这种例外是单向的,不可以将基类对象和地址赋给派生类指针
13.2 继承:is-a关系
- 公有继承是最常用的方式,它建立一种is-a关系,即派生类对象也是一个基类对象,可以对基类对象指向任何操作,也可以对派生类对象执行
- 公有继承不能建立is-like-a关系,也就是它,它不采用明喻,律师就像鲨鱼,但律师并不是鲨鱼
- 公有继承不建立use-a关系,比如计算机可以使用激光打印机,但从Computer类派生出Printer类是没有意义的
13.3 多态公有继承
多态—同一个方法的行为随上下文而异,有两种重要的机制实现多态公有继承
- 在派生类种重新定义基类的方法
- 使用虚方法
使用virtual比较复杂, 如果方式是通过引用或指针而不是对象调用的,它将确定使用哪一种方法。如果没有使用关键字virtual,程序将根据引用类型或指针类型选择方法,如果使用了virtual&#