2008-12-15 19 views
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; 
//... 
} 

请给我一个链接到一个网站或一个地方的一本书,我可以从面向对象语言的角度找到明确的定义,即类之间的每种关系是什么。

回答

1

握住另一类是指一类与通过父子关系的另一类相关联。例如,Path有一个点列表。路径是点列表的父点,它是各个点的父点。

汇总方式采取不同的类,并把他们一个接口后面,以便它们显示为一类。例如,一个FileDialog将有几个按钮类,一个文本输入类,一个listview/treeview类等等。但是对于系统的其余部分,它只是激活了方法,可能会分配一个默认文件名,然后检索剩余的文件。

它包含所有其他类别的事实是无关紧要的使用它,因为它的工作原理是聚集所有的类来执行预期的行为filedialog.However其他类。

0

这非常关乎所有权和知名度。有这些关系不同的名字,但你应该考虑以下两点:

  • 是否父有过孩子严格的所有权,这样,当父母去世,孩子也应该死吗?

  • 是孩子可见,除了家长的其他实体?

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

1

IMO,如果我理解正确的,你所要求的成分 - 聚集的定义。聚合或持有是实体的集合。构图有一个更严格的限制。考虑给予学生的平均分数:当我们计算平均分数时,我们不能排除任何项目。构成与此类似。没有项目可以错过。另一方面,聚合更为松散。

一个有趣的比喻将是一个完整的箭头和汽车的颤动。箭袋是箭的聚集,箭袋可以存在而没有箭;汽车是一个组成部分(总和的部分)。并且不要争辩说没有车轮的汽车仍然是一辆车:)

至于参考文献:http://www.bletchleypark.net/algorithms/software/oop.html

相关问题