http://ift.tt/2xzTXub
c++中类的五种关系
[TOC]
组合关系
- 强烈的从属关系
- 是我本身的一部分
- 我离开你无法运行,你离开我也不能运行
具体使用的方法就是用做类的数据成员
class A{
private:
...
public:
...
};
class B {
private:
B objB;
};
举个坦克大战的例子就是操作引擎和地图就应该是组合关系
操作引擎的操作依赖于地图,没有地图,操作引擎无法绘制,地图离开操作引擎,也没有办法显示
继承关系
继承是组合的一种特殊形式
聚合关系
- 按照讲义上来说是部件可共享
- 但是我感觉这个讲义上讲的有点问题
我自己的理解:
首先看语法:
class A{
public:
B b;
};
class B{
};
聚合和组合其实应该是差不多的,从使用语法上完全无法分辨
B类于A类是组合或者聚合的前提是:
- B类必须是确定存在的
- 销毁A类,B成员也随之消失
- 销毁B成员,A类也不存在
关联关系
- 我不依赖你,没有从属关系
- 有你也行, 没你也行,整个程序不影响运行
- 但是如果有你的时候需要和你互动
class A{
};
class B{
public:
A *a;
};
- B 类中,A类不一定是具体存在的
- 销毁B类,A类可能还存在
依赖关系
- 没有从属关系
- 有你也行,没有也中
- 不需要跟你保持持久的交流
- 就是偶尔在需要的时候用一下你
- 表现在语法中就是把你这类的实例对象作为参数传递进去
class A{
};
class B {
public:
void fun(A);
};
最后
总结语法:
组合和聚合可以是一种语法,都是作为另一个类的数据成员,作为这个类的不可获取的一部分,从一开始就保持持久的交流和数据交换
依赖和关系可以是一种语法:都是作为另一个类的指针成员,没有强烈的从属关系,在需要用到的时候使用,且仅在使用的时候有数据交流
The post c++中类的五种关系 appeared first on cole.
http://ift.tt/eA8V8J c++, class, cpp, 面向对象 September 25, 2017 at 06:05PM
评论
发表评论