C++ 对象与对象的关系

对象与对象的关系


在一个系统中,一个对象可能与不同的对象相关,以下是不同的关系

  • 依赖(Dependency)使用一个
  • 关联(Association)使用一个
  • 聚合(Aggregation)有一个
  • 组合(Composition)有一个,“用…来实现”
  • 继承(Inheritance)是一个
  • 类模板(Class template)

依赖

在这里插入图片描述
依赖(Dependency):使用一个

class Book{};
class Food{};
class Human
{
public:
	void Read(Book book);
	void Eat(Food food);
};

通过方法与外部实体产生关系,依赖关系两个独立的对象之间非常轻微的关系

不存在包含于被包含到关系,通过方法与外部类型产生关联

class Notebook_computer
{};
class deattop_computer
{
private:
	string cup;
	int Memory;
	int ssdist;
};

程序类之间的“依赖”关系主要体现出的是一种使用关系,对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者当一个对象依赖于另一个对象所提供的服务时,这两个对象之间主要体现为依赖关系

在类型的实际中,依赖关系主要体现在目标类型的对象(实例),作为当前类型方法的局部对象或者方法的参数类型

关联

在这里插入图片描述
关联(Association):使用一个

对于两个相互独立的对象,当对象A与另一个对象B存在固定的对应关系时,这两个对象之间为关联关系,关联关系是依赖关系的特例

在类型的设计中,关联关系主要体现在目标类型的指针或引用,作为当前类型的属性成员,没有整体和部分的关系,只是有关系而已

  • 弱关联
class Book{};
class Person
{
private:
	Book* ptr; //弱关联
public:
	Person() :ptr(nullptr) {}
	Person(Book* p) :ptr(p) {}
	~Person() {}
	void SetBook(Book* p) { ptr = p; }
	void Study()
	{
		if (ptr != nullptr)
		{
			cout << "read" << endl;
		}
		else
		{
			cout << "play" << endl;
		}
	}
};

int main()
{
	Book book;
	Person son;
	son.SetBook(&book);
}

我们所关联的对象并不在我们的生存期中

  • 强关联
class Student
{
private:
	Book& _book;  //必须初始化
public:
	Student(Book &book):_book(book){}
};

int main()
{
	Book book;
	Student stu(book);
}

构建stu的时候,必须由book进行初始化,形成强关联

聚合

在这里插入图片描述

class Point
{
private:
	float _x;
	float _y;
public:
	Point() :_x(0.0), _y(0.0) {}
};
class circle
{
private:
	Point _center; //圆心
	float _radius; //半径
};
class circle
{
private:
	Point* pCenter;
	float _radius;
}

圆对象进行析构,不代表一定要将点对象也进行析构,其为聚合关系

组合

在这里插入图片描述

class Soul {};
class Body {};
class People
{
	Soul _soul;
	Body _body;
public:
	People(Soul soul,Body body):_soul(soul),_body(body)
	{}
};

当People对象析构,则Soul与Body对象也必须进行析构

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值