📜  C++ 中的对象组合-委托与示例

📅  最后修改于: 2022-05-13 01:55:41.661000             🧑  作者: Mango

C++ 中的对象组合-委托与示例

对象组合

对象是面向对象编程的基本单元,代表现实生活中的实体。复杂对象是由较小对象或对象集合构建的对象。例如,手机由各种对象组成,如相机、电池、屏幕、传感器等。这种从简单对象构建复杂对象的过程称为对象组合
在面向对象的编程语言中,对象组合用于彼此之间具有“ has-a”关系的对象。因此,复杂对象称为整体或父对象,而简单对象通常称为子对象。

句法:

在上面给出的类中,B 使用类 A 的对象作为其数据成员。因此,B 是使用简单类 A 的复杂类。让我们看一下使用组合的程序。

下面是复合类的实现:

C++
#include 
using namespace std;
  
// Simple class
class A {
public:
    int x;
  
    // COnstructor initializing
    // the data members
    A() { x = 0; }
  
    A(int a)
    {
        cout << "Constructor A(int a) is invoked" << endl;
        x = a;
    }
};
  
// Complex class
class B {
    int data;
    A objA;
  
public:
    // COnstructor initializing the
    // data members
    B(int a)
        : objA(a)
    {
        data = a;
    }
  
    // Function to print values
    // of data members in class
    // A and B
    void display()
    {
        cout << "Data in object of class B = " << data
             << endl;
        cout << "Data in member object of "
             << "class A in class B = " << objA.x;
    }
};
  
// Driver code
int main()
{
    // Creating object of class B
    B objb(25);
  
    // Invoking display function
    objb.display();
    return 0;
}


C++
// C++ program to illustrate the
// Object Delegation
#include 
using namespace std;
class First {
public:
    void print() { cout << "The Delegate"; }
};
class Second {
    // Creating instance of the class
    First ob;
  
public:
    void print() { ob.print(); }
};
  
// Driver Code
int main()
{
    Second ob1;
    ob1.print();
    return 0;
}


输出:

对象组合的类型:

对象组合有两种基本子类型:

1. 组合:组合关系是部分与整体的关系,其中一个部分一次只能是一个对象的一部分。这意味着在创建对象时创建部件,并在销毁对象时销毁部件。要成为组合物,对象和部分必须具有以下关系-

  1. 部分(成员)是对象(类)的一部分。
  2. 部分(成员)只能属于一个对象(类)。
  3. 部分(成员)的存在由对象(类)管理。
  4. 部分(成员)不知道对象(类)的存在。

创建和销毁零件的规则有一些变化:

  1. 一个合成可以避免创建一些部分,直到它们被需要。
  2. 合成可能会选择使用已提供给它的部分作为输入,而不是创建部分本身。
  3. 组合可以将其部分的破坏委托给其他对象。

2. 聚合:聚合也是部分整体的关系,但在聚合中,部分可以同时属于多个对象,整体对象不负责部分的存在。要符合聚合条件,整个对象及其部分必须具有以下关系:

  1. 部分(成员)是对象(类)的一部分。
  2. 部件(成员)一次可以属于多个对象(类)。
  3. 部分(成员)不存在由对象(类)管理。
  4. 部分(成员)不知道对象(类)的存在。

对象组合的好处:

使用对象组合可以提供以下好处:

  1. 重用现有代码:对象组合允许重用现有代码,而无需像通常在继承中所做的那样对is-a 关系建模。
  2. 干净的设计 API:使用对象组合有助于设计干净和组合的 API。这是因为当类被组合时,更容易决定被引用的类是成为 API 的一部分还是被隐藏。
  3. 在不需要外部客户端的情况下更改组合中使用的类的实现:组合还允许在必要时使代码更容易更改和适应。可以在没有任何副作用的情况下更改内部类,并且可以在内部处理更改。

对象委托

对象委托是指使用另一个类的对象作为另一个类的类成员。它被称为对象委托。委托可以替代继承,但是在一个继承中,有一种关系,而在委托中,类之间没有继承关系。

C++

// C++ program to illustrate the
// Object Delegation
#include 
using namespace std;
class First {
public:
    void print() { cout << "The Delegate"; }
};
class Second {
    // Creating instance of the class
    First ob;
  
public:
    void print() { ob.print(); }
};
  
// Driver Code
int main()
{
    Second ob1;
    ob1.print();
    return 0;
}

输出:

对象委托的好处:

  1. 可以在不更改重用类的情况下更改重用类。
  2. 多个重用类可以同时共享重用类变量。
  3. 重用的变量和方法以及重用的类可以在不同的计算机上。
  4. 它适用于单继承语言。

对象组合与对象委托

S No.Object CompositionObject Delegation
1It is about relationships between objects.It is about passing work from one object to another.
2In composition,  the methods of the inner object may be used only privately and not re-exposed.Delegation involves re-exporting methods.
3The composition has some implications for object lifecycle, the parent object owns the child and the child doesn’t have much reason to exist on its own.The delegation does not have this implication.