利用已经创建好的类实现新的类(复用类)
组合——复用类的生成
将一个类的对象作为另一个类的对象
对象成员语法也包含
对象成员
包含已有类对象作为成员,可以通过成员对象使用已有类的功能
如果作为公有成员还可以包含成员对象发送消息
组合一个已有类的对象作为新类成员的称为“按值包含”来实现all—part关系
对象成员的初始化
和普通初始化没太大差别
复用类的实现
简单灵活复用已有类
有效的方法
新类封装已有类
指针成员与聚合关系
UML中聚合也描述组成关系,但是比组合更松散
聚合的特点是成员对象可以独立于聚合对象存在
聚合对象中包含成员类对象指针
实现一般借助数组或vector之类的标准容器
继承——复用类的接口
泛化关系和继承
描述概念的层次或分类
如:门、纲、目..........
这个关系被称为泛化(UML)或者继承(cpp)
在“门”中定义“目”,且顶层指针可以处理其中的地址
被继承已有类被称为基类,继承得到新类被称为派生类,派生类可以继续被继承,这样层次被称为继承层次
继承的语法
class 派生类的名字:[访问限定符] 基类名字
{成员声明};
基类成员在派生类的可见性
成员在基类的访问限定
继承使用的访问限定
改变个别成员的可访问性
using申明可以在派生类中调整个别基类成员的访问限制
派生类只能为它访问的名字使用
公用继承私有继承
公有:继承所有接口
私有:继承所有数据和功能
可以使成员隐藏在基类中,避免误操作
派生类对象的结构
派生类对象由其基类子对象以及派生类自己的非静态数据成员构成
存顺序:父类 子类
删: 子类 父类
禁止继承的类
在类后面加关键字 final
static成员继承
在继承层次中只存在该成员的唯一定义
派生类和基类的不同
子类不同于父类
子类对父类的两种修改方式
隐藏或覆盖(override)
扩充
任何需要&父类的地方,都可以由其公有&派生类的对象代替
向上类型转换
会发生对象切片(safe)