【C/C++】类之间的横向关系

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述

c语言内容💖:

专栏:c语言之路重点知识整合

【c语言】全部知识点总结


类之间的关系可以分为横向关系和纵向关系,本文介绍类之间的横向关系

一、组合

组合(Composition):表示一种拥有的关系,它使一个类成为另一个类的一部分。

组合关系是一种强依赖关系,如果父对象销毁,则子对象也将被销毁。

组合是包含与被包含的关系。组合是一个类中包含另一个类对象。
组合是一种强所属关系,组合关系的两个对象往往具有相同的生命周期,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。
一般来说被组合对象不能脱离组合对象独立存在,整体不存在,部分一定不存在。

例如:人与手、人与头之间的关系,人需要包含头和手,头、手是人的一部分且不能脱离人独立而存在

在这里插入图片描述

二、关联

关联(Association) 关联是指一个类与另一个类存在连接关系,但是两个类的对象之间不是强制性的,一个类的对象可以独立存在。关联关系可以是单向的或者双向的。在双向关联中,两个类对象互相包含对方的引用。

关联不是从属关系,而是平等关系,可以拥有对方,但不可占有对方
。完成某个功能与被关联的对象有关,但是可有可无。
被关联的对象与关联的对象无生命周期约束关系,被关联对象的生命周期由谁创建就由谁来维护。
只要二者同意,可以随时解除关系或是进行关联,被关联的对象还可以再被别的对象关联,所以关联是可以共享的

举例:人和朋友的关系,人要完成玩游戏这个功能,没有朋友可以自己玩游戏,如果交到朋友了就可以和朋友一起玩游戏。

在这里插入图片描述

三、依赖

依赖(Dependency) 依赖是指一个类使用另一个类的对象,但是这种依赖关系是暂时性的,不会持久存在。如果一个类的方法需要调用另一个类的对象,那么这种调用就是一种依赖关系。

一个对象的某种行为依赖于另一个类对象,被依赖的对象视为完成某个功能的工具,并不持有对他的引用,只有在完成某个功能的时候才会用到,而且是必不可少的。
依赖之间没有生命周期约束关系。

举例:人要完成玩电脑,就需要用到电脑,电脑作为一个工具,其他的时候不需要,电脑也不可能作为人的属性而存在(非组合关系) ,人必须依赖于电脑才能玩电脑。

在这里插入图片描述

四、聚合

聚合(Aggregation) 聚合是指一个类包含另一个类的对象,但是这个对象的生命周期可以独立存在。聚合是一种弱关联,一个类的对象可以存在,即使包含这个对象的类对象不在了。

多个被聚合的对象聚集起来形成一个大的整体,聚合的目的是为了统一进行管理同类型的对象,聚合是一种弱所属关系,被聚合的对象还可以再被别的对象关联,所以被聚合对象是可以共享的。
虽然是共享的,聚合代表的是一种更亲密的关系,相当于强版本的关联。

举例:多个人一起玩游戏进行统一管理

在这里插入图片描述

代码举例类之间的横向关系

#include <iostream>
#include <string>
using namespace std;
class CHand
{
public:
	void Move()
	{
		cout << "手移动" << endl;
	}
};
class CComputer
{
public:
	void Compile()
	{
		cout << "编译程序...生成可执行文件" << endl;
	}
};
class CFriend
{
public:
	void Play()
	{
		cout << "朋友玩LOL很好" << endl;
	}
};
class CPeople
{
public:
	CHand m_hand;
	CFriend* m_pFri;
	CPeople() :m_pFri(nullptr)
	{

	}
	void clap()
	{
		m_hand.Move();
		cout << "鼓掌" << endl;
	}
	void code(CComputer* pComp)
	{
		if (!pComp)return;
		m_hand.Move();
		cout << "敲代码" << endl;
		pComp->Compile();
		cout << "运行程序" << endl;
	}
	void playLOL()
	{
		if (m_pFri)
		{
			m_pFri->Play();
			cout << "和朋友玩LOL" << endl;
		}
		else
		{
			cout << "没朋友自己玩LOL" << endl;
		}
	}
};

int main()
{
	//组合
	{
		CPeople peo;
		peo.clap();
	}
	//依赖
	{
		CComputer comp;
		CPeople ztx;
		ztx.code(&comp);

	}
	//关联
	{
		CPeople peo;
		peo.playLOL();	//自己玩

		CFriend fri;
		peo.m_pFri = &fri;
		peo.playLOL();	//一起玩
	}


	return 0;
}

在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天喜Studio

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

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

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

打赏作者

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

抵扣说明:

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

余额充值