zoukankan      html  css  js  c++  java
  • 11.组合与继承

    • Inheritance(继承)
    • Composition(复合)
    • Delegation(委托)

    像字符串类,复数类一把不会和其他类发生关联,但有的类可能需要和其它类发生关联,这就是面向对象的思想。

    • Composition(复合) ,表示has-a

    注解:

    1. queue跟deque的关系就是复合关系,这就是has-a关系,表示‘我’里面有另外的东西。
    2. 联想C的结构(体),C的结构体里面可以有别的结构体,也可以由别的整型,浮点型,字符型对象,这也是has-a的关系。
    3. 所以,Composition表示一个类里面有其他类的实例(来自网友弹幕观点)。
    4. 其实queue是个容器,它容纳了另外一个东西:deque类的实例。

    补全一点:

     注解:

    1. queue的public区域中6个功能完全利用deque的实例c来实现。
    2. 类复合的意义在于:A拥有B的实例,A的所有功能都利用B的实例来实现。
    3. 其实这是标准库中的例子。queue队列:先进先出,deque(double ended queue)队列:两端进出,显然后者功能更加强大。
    4. 最后一句,deque的pop_front()什么都没做,直接改装成了queue的pop()。
    5. 说不定queue里面的deque有100个功能,但是只开放了6个功能给queue.或者说queue只使用了deque里面的6个功能。
    6. 这种改造叫做Adapter(改造,适配)。把已有的类的功能改造成客户所需要的其它类的功能。
    7. 并不是所有的Composition都长这个样子哦,这只是一个特别的例子。
    • Composition(复合)关系下的构造和析构

    构造由内而外

    Container的构造函数首先调用Component的default构造函数,然后才执行自己。

     注解:

    1. 就像建造大楼一样,先建造里面,再建造外面。
    2. 红色的Component()表示先调用内部的构造函数(如果不符合自己的要求,则要自己写哦),{...}表示后做自己的事情。

    析构由外而内

    Container的析构函数首先执行自己,然后才调用Component的析构函数。

    注解:

    1. 就像拆大楼一样,先拆外面,后拆里面。就像剥葱一样,先剥外面的,再剥里面的。
    2. {...}表示先做自己的事情,先执行自己的析构语句。
    •  Delegation(委托). Composition by reference(两个类通过引用(指针)复合)

     

    注解:

    1. 左边仍然有一个右边的类的实例,但是这个“有”有点虚,不是那么扎实。只是有一个指向右边的类实例的指针,也可以说只是存储了另一个类的对象的首地址。这样的关系叫做Delegaion(委托)。
    2. 在任何一个时间点,我想做事情的时候我就可以调用。
    3. reference counting表示引用计数。a、b、c的内容都是Hello.
    4. 内容共享,共享的前提是内容要一样。
    5. 涉及到共享指针、写时复制、写时拷贝(copy on write)。
    • Inheritance(继承),表示is-a

    注解:

    1. C++的继承方式有3种:public,private,protected,但是最重要的情况就是public.
    2. 继承的特点:人是一种动物,动物是一种生物。香蕉是一种水果。这些都是is-a的关系。
    3. 数据是可以完整的继承下来的。
    4. _List_node所创建的实例将拥有三个数据成员,自己的1个加上继承自_List_node_base的两个。这一点并不是继承这个语法最有价值的部分。最有价值的部分是虚函数概念。

    注解:

    1. 子类的对象有父类的成分在里面。
    2. base class的dtor必须是virtual,否则会出现undefined behavior.

     构造有内而外(这样才坚固)

    Derived的构造函数首先调用Base的default构造函数,然后才执行自己(...)。

     析构有外而内(这样也才坚固)

    Derived的构造函数首先执行自己(...),然后才调用Base的析构函数。

  • 相关阅读:
    Android studio开发找不到HttpClient问题
    Android studio开发找不到HttpClient问题
    互联网应用之传递HTTP参数
    互联网应用之传递HTTP参数
    计算机组成原理
    计算机组成原理
    【NYOJ】[40]公约数和公倍数
    【NYOJ】[40]公约数和公倍数
    【NYOJ】[39]水仙花数
    【NYOJ】[39]水仙花数
  • 原文地址:https://www.cnblogs.com/yibeimingyue/p/13379407.html
Copyright © 2011-2022 走看看