我知道协会和聚合和组合化和泛化他们是通过什么样的定义。继承“是一个”关系和组合物“具有”的关系。

Class A {
}

Class B extends A { // this is Generalization
}

Class C {
 A ob;  // this is composition
}

现在我的问题是如何聚集和简单的协会的编程代码方面所示。 ?

有帮助吗?

解决方案

我怀疑你的真正问题是关于组成与聚集做。你可以认为在所有权方面,但真正的区别(我的钱)的区别是什么控制聚合的对象的生命周期。

在组合物中。当由对象被销毁其包含部分或类与它一起破坏。具有聚合,所包含的对象的生命周期可以是独立的包含对象的。在代码中。这归结为是否由值或参考所指定的组件对象。聚合具有以引用的方式完成(或指针如示例中)。如果它是由值完成的部件部分将超出范围,并用含有对象被破坏,并且因此组合物。

因此,在这种情况下,发动机是组成和电池聚集的一个示例的示例。

#include <iostream>

using namespace std;

class Engine
{
   public:

      Engine() {cout << "Engine created\n";};
     ~Engine() {cout << "Engine destroyed\n";};
};


class Battery
{
   public:

      Battery() {cout << "Battery created\n\n";};
     ~Battery() {cout << "\nBattery destroyed\n";};
};

class Car
{
   private:

      Battery *bat;
      Engine  eng;  //Engine will go out of scope with Car

   public:

      Car(Battery* b) : bat(b) {cout << "Car created\n";};
     ~Car() {cout << "Car destroyed\n";};

       void drive(int miles) {/*...*/};
};



int main(int argc, char *argv[])
{
   //a Battery lifecycle exists independently of a car
   Battery* battery = new Battery();

   //but a car needs to aggregate a Battery to run
   Car* car1 = new Car(battery);

   car1->drive(5);

   //car1 and its Engine destroyed but not the Battery
   delete car1;

   cout << "---------------\n";

   //new car, new composed Engine, same old Battery
   Car* car2 = new Car(battery);

   car2->drive(5);
   delete car2;

   //destroy battery independently of the cars
   delete battery;

}

道歉,如果这不是最好的例子,但希望它示出了主点。

其他提示

我不知道你要什么了这里,但我建议下面的例子:

聚合

public class A { }
public class List<A> { }  // aggregation of A

协会(使用)

public class A
{
    public void AMethod() { ... }

public class B
{
    public void BMethod( A a )
    {
         a.AMethod();  // B uses A
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top