OO设计思想->继承与组合的区别

C++继承、组合、聚合和关联定义:

继承

继承,表达的是逻辑上B类是A类的“一种”,为了提供程序可复用性,采用B继承A的属性和功能。
以下场景特别注意不能使用继承:
1.A类和B类毫无关系,不可以为了使B类的功能更多些二让B类继承A类的功能。
2.逻辑上A类是B类的"一部分",此时应该用组合的形式,比如眼睛和耳朵是头的一部分。
calss animal
{};
class human : public animal  // 继承
{};

组合

组合,表达两个平等对象之间整体和局部的关系,如【头、脚、手】和人的关系,整体和局部拥有相同的生命周期,换句话说,如果整体对象不存在了,那么局部对象也会消亡。
class head
{};
class body
{};
calss human
{
private:
    head h;  // 数据成员对象表示的组合关系
    body b;  // 
}

聚合

聚合,同样表的是整体和局部的关系,但是这种关系要松散得多,整体和局部拥有各自的生命周期,两者可以单独存在,相互独立,并不像组合一样两者相互依存,但两者也可以聚合在一起,形成一个新的类型。比如,我们说“people has a house”(某人有房子,房子和人都是各自独立的,而两者聚合在一起,就成了“有房子的人”),在C++中,我们通常在整体类中加入指向局部类的指针,来表达这种“聚合”关系。
calss house
{};
class people
{
/// ...
private:
    house* pHouse; // 指针表示的聚合关系
};

关联

关联,关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的,例如一个公司包含了很多员工,其实现上是差不多的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值