zoukankan      html  css  js  c++  java
  • 条款38:通过聚合设计has-a或者is-implemented-in-terms-of

    聚合:类型之间的一种关系,就是一种类型内含有另一种类型的变量。

    has-a:

     1 class Address
     2 {
     3     
     4 };
     5 
     6 class PhoneNumber
     7 {
     8     
     9 };
    10 
    11 class Person
    12 {
    13 public:
    14     
    15 private:
    16     std::string name;
    17     Address address;
    18     PhoneNumber cellphone;
    19 };

    说明:Person中包含姓名、地址、手机号,是一种典型的has-a关系。

    is-implemented-in-terms-of(根据一种类型实现另一种类型):

    用链表List实现集合Set[具体如何实现请参考《算法精解:C语言描述 第7章》],但是我们知道List可以包含重复的元素,而set不能重复,因此set不是一个List,即通过public继承不能满足要求。当然也可以重新设计一个set,但是由于set中的大部分操作与List一样,本着软件重用的思想,set可以如下定义:

     1 template<typename T>
     2 class Set
     3 {
     4 public:
     5     bool member(const T& item) const;
     6     void insert(const T& item);
     7     void remove(const T& item);
     8     std::size_t size() const;
     9     
    10 private:
    11     std::list<T> rep;
    12 };

    总结:

    has-a意味着一种类型是另一种类型的补充;is-implemented-in-terms-of意味着一种类型要靠另一种类型才能实现。

  • 相关阅读:
    Senventh Week(补充完整)
    Sixth Week(补充完整)
    Fifth Week(补充完整)
    Fourth Week (补充完整)
    九大内置对象
    matlab 简单绘图
    matlab ./
    困惑
    【转】matlab中inf
    matlab x~=0
  • 原文地址:https://www.cnblogs.com/benxintuzi/p/4525742.html
Copyright © 2011-2022 走看看