0

我无法区分聚合和持有之间的区别。比如说,C++ 是什么意思?
我想当 A 类的对象持有(或实例化)B 类的对象时,它使用它自己来执行一些功能。
例如:

class A {
 int state;
 public: 
  A(int s): state(s) {}
  int inc() { return state++; }
};
class B {
  int app;
  string s;
public:
  B(): app(0), s("") {}
  B(int A, const string& str): app(A), s(str) {}
  void f(int p);
  ~B() { app = 0; s = ""; }
};
void B::f(int p)
{
   A mA(p);
   app = mA.inc();
}

A类对象的聚合是这样的:

class B{
 A t;
 //...
}

请给我一个网站链接或书中某个地方的链接,我可以在其中找到关于 OO 语言的明确定义,类之间的每种关系到底是什么。

4

3 回答 3

1

持有另一个类意味着一个类通过父子关系与另一个类关联。例如,路径有一个点列表。路径是点列表的父级,点列表是各个点的父级。

聚合意味着采用不同的类并将它们放在接口后面,以便它们显示为一个类。例如,一个 FileDialog 将有几个按钮类、一个文本输入类、一个列表视图/树视图类等等。但是对于系统的其余部分,它只有激活方法,可能分配一个默认文件名,然后检索其余部分。

它由所有其他类组成的事实对于使用它作为文件对话框的其他类来说并不重要。但是它通过聚合所有类来执行预期的行为来工作。

于 2008-12-15T15:37:56.427 回答
1

国际海事组织,如果我理解正确,您要求的是组合与聚合的定义。聚合或控股是实体的集合。组合具有更严格的约束。想想授予学生的平均分:当我们计算平均分时,我们不能排除任何项目。组成与此类似。不能错过任何项目。另一方面,聚合的定义更为宽松。

一个有趣的类比是一个装满箭的箭袋和一辆汽车。箭袋是箭头的聚合,箭袋可以没有箭而存在;汽车是一个组合(部分的总和)。并且不要争论没有轮子的汽车仍然是汽车:)

As for references: http://www.bletchleypark.net/algorithms/software/oop.html

于 2008-12-15T18:13:08.843 回答
0

这在很大程度上与所有权和知名度有关。这些关系有不同的名称,但您应该考虑以下两点:

  • 父母是否对孩子有严格的所有权,父母死了,孩子也应该死?

  • 除了父母之外,其他实体是否可以看到孩子?

这些问题的答案将帮助您澄清这些关系。

于 2008-12-15T15:13:17.677 回答