c++类的内嵌和类的继承(仅限共有继承)的深度探究。

在一些情况下,二者都可以完成规定的任务,但是他们二者其实是有优先使用场景的区别的。

一.

类的内嵌:”has-a” 的关系,如果类b中嵌入一一个类a的对象,那么就说明每一个类b的对象中都包含有一个类a的对象。是整体和部分的关系,b类对象包含了a类全部的数据,但不包括a类对象的对外接口。

示例程序:

class engine{
public:
void work(){}  //发动机转动
};
class car{
public:
void move(){}  //汽车移动
private:
engine e;  //汽车发动机
}

通过上面的示例程序,我们不难看出,发动机是汽车的整体,发动机有运转的功能,但是汽车不再具有这样的功能,汽车对发动机的整合,具备了自己的功能---move。 但是发动机的work函数接口被磨掉了,也就是说我实例化一个car类对象之后不能加 . 操作符直接访问work函数。

 

二.

类的继承:“is-a”的关系,如果类b继承了类a,这表示每一个类b对象都是一个特殊的类a对象。是一般和特殊的关系。 类b不仅包含了类a的全部数据,还包含了类a的全部接口。

 示例程序:

class truck:public car{

public:

void load(){}  //装货

void dump(){}//卸货

}

通过上面的示例程序,我们不难看出,卡车只是一种特殊的车,它不仅可移动,还可以装卸货,并没有把我原来的car类的move接口给抹掉。我仍然可以直接通过truck类型的对象来访问car中的move函数。

总结: 

 

一辆车中有一个发动机,但是我们不会认为一辆车就是一个发动机。包含关系,整体-部分。

一辆卡车是一辆汽车,但是我们不会以为一辆卡车当中有一个汽车。递进关系,一般-特殊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ad_m1n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值