首页 > C/C++ > 侯捷-c++面向对象程序设计-学习笔记-11-类之间的关系:继承、组合和委托

侯捷-c++面向对象程序设计-学习笔记-11-类之间的关系:继承、组合和委托

2020年8月17日
分类: C/C++ 标签: ,

1,继承

2,组合

假如有两个class:A和B。若A中包含一个类型为B的成员变量,则A、B之间的关系为组合。用UML来表示为:

[A]◆→[B]

A中的B一定是一个实体对象,A has-a B。

由于A中拥有B,所以在创建A时需要先创建B,这意味着先调用B的构造函数,再调用A的构造函数。【由内而外执行构造】

对象销毁的过程恰恰相反,先调用A的析构函数,再调用B的析构函数。

【可以拿剥洋葱的过程做类比析构过程:由外而内,逐层剥皮】

这里,介绍一个常用设计模式:Adapter(适配器)。

template <class T>
class queue{
  //...
  protected:
    deque<T> c;

  public:
    bool empty() const {return c.empty();}
    size_type size() const {return c.size();}
    void pop(){c.pop_front();}
    //...
};

在这个例子中,queue是我们需要的一个队列,deque是标准库提供的一个功能完备的双端队列。queue的功能全部通过成员变量c来实现,queue只是对c的部分接口进行了封装以使其满足需求,或者说改变c的接口调用形式以适配现有代码。

 

3,委托(以引用方式组合)

假如有两个class:A和B。若A中包含指向B对象的指针类型的成员变量,则A、B之间的关系为委托。用UML来表示为:

[A]◇→[B]

A中的B是一个指针,A has-a-reference to B。

您可能需要这些【参考资料】:
零一积流|IT参考 原创文章,转载请注明出处: http://www.it-refer.com/2020/08/17/houjie-cplusplus-object-oriented-programming-11-class-relationships-inheritance-composition-delegation


本文的评论功能被关闭了.