C++的新类创建:继承与组合

组合和继承的主要目的是为了代码的重用。

1.什么是继承

A继承B,说明的是A是B的一种,并且B的所有行为对A都有意义
eg:
A=WOMAN B=HUMAN
A=鸵鸟 B=鸟(不行),因为鸟会飞,但是鸵鸟可不成

2.继承的一些规则

1)在继承中,所有继承的东西都默认为private,就算它原来在基类是public的,如果希望在子类中也是public,那么在继承时应该使用public声明
2)如果派生类重载了基类的函数,那么派生类的对象调用这些函数时将默认为调用派生类的版本,如果要用基类的版本则要加上类名和范围分解符
3)当创建一个派生对象时将默认调用基类的构造函数,其实不管是组合还是继承,基本思想就是在进入新类的构造函数体之前调用所有的构造函数。
4)有一些函数是非自动继承的:构造函数,析构函数,operator=

3.什么是组合

若在逻辑上A是B的“一部分”(a part of),则不允许B从A派生,而是要用A和其它东西组合出B。
例如眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head应该由类Eye、Nose、Mouth、Ear组合而成,不是派生而成

4.两者的选择

is-a关系用继承表达,has-a关系用组合表达。继承体现的是一种专门化的概念而组合则是一种组装的概念。
另外确定是组合还是继承,最清楚的方法之一就是询问是否需要新类向上映射。

也就是说当我们想重用原类型作为新类型的内部实现的话,我们最好自己组合,如果我们不仅想重用内部实现而且还想重用接口的话,那就用继承。多态性对于接口的重用很重

你可能感兴趣的:(C++)