C++组合和继承(简单总结)

简单总结一下组合和继承之间的区别。

类的组合:是指一个类内嵌有其他类的对象。
类的继承:是指从已有类那里得到已有的特性。
二者是通过已有类来构造新类的两种基本方式,都使得已有对象称为新对象的一部分,从而达到代码复用的目的

但组合和继承其实反应了两种不同的对象关系。组合反应的是“有一个”(has-a)的关系,继承中使用最普遍的公有继承反应的是“是一个”(is-a)关系。


有两个抽象类A和B。若类B中含有类A的对象,也就是说类B拥有数据成员类A的对象,也就会表示一个B类型的对象“有一个”A类型的对象(数据成员)。由此可以看出,A类型的对象与B类型的对象时部分与整体的关系。B类对象虽然包括A类对象的全部内容(数据),但是本身并不包括A类对象的接口。因为A类对象一般作为B类的私有成员,A类对象的对外接口会被B类隐藏起来,只能为B类所用。


如果类A是类B的的公有基类,那么表示每一个B类型的对象都“是一个”A类型的对象。B类型的对象与A类型的对象是特殊与一般的关系。通过公有继承,B类型的对象不仅包含了A类对象的全部数据(类似于组合),而且还包含了A类型对象的全部接口(不同于组合)

继承中的私有继承和保护继承不满足类型兼容规则,此类继承不能表示“是一个”的关系,不具备公有继承由类型兼容性带来的灵活性。


源于以前的C++笔记03

猜你喜欢

转载自blog.csdn.net/renzhadebenyuan/article/details/80572112
今日推荐