美文网首页
GeekBand.重学C++(2)

GeekBand.重学C++(2)

作者: EthanZhang_ | 来源:发表于2016-03-21 01:38 被阅读0次

    类间关系:组合/委托/继承

    Composition 组合(has-a)

    • Container has a Component: Component 类 功能很全面,Container 类根据需要设计对外接口,实现全部在 Component 类中。
    Composition
    • 内存:Container 对象的内存中,包含一块 Component 的内存; 由内而外构造,由外而内析构.
    Composition memory

    Delegation 委托(Composition by reference)

    • Handle reference Body:所有实现都在 Body 类中完成;Handle 根据需要设计对外接口,通过调用 Body 的方法实现
    Delegation
    • 内存分布:Handle 类有一块内存,存放 Body 类对象的内存地址
    Delegation memory
    • Delegation 的优点:
      • 信息隐藏
        包含 Handle 类所在的头文件,不仅成员函数实现不可见,类中实际的数据成员也不可见,很好的实现了信息隐藏。
      • 编译防火墙
        修改 Body 类,包含 Handle 类头文件的所有源文件都不需要重新编译,只需要编译 Body 类所在的源文件。在大工程中,可以有效的减少编译时间。
      • Copy on write
        Body 类增加引用计数字段,多个 Handle 类的对象可以引用同一个 Body 对象,某个 Handle 对象需要改变 Body 对象的数据成员时,Copy 一份副本供其修改。如果类 size 很大,可以减少内存使用。

    Inheritance 继承(is-a)

    • 内存分布:子类对象的内存中,包含一块父类对象;由内而外构造,由外而内析构
    Inheritance Inheritance memory
    • 哪些成员可以被继承?哪些不能继承?
      • 数据成员都被继承
      • 友元关系不能继承
      • 非虚成员函数。子类可以覆写(override)
      • 虚函数,子类可以重写
      • 纯虚函数,子类必须实现 (父类可以定义)
    • 价值在于,与虚函数搭配使用,实现多态

    Inheritance with virtual

    • Template Method:父类的成员函数实现应用程序框架(处理流程),将子类中不同的步骤定义为虚函数,子类重写。
    • 优点:代码重用,子类只需要实现与父类不同的部分,其他部分可以使用父类的实现。

    Inheritance + Composition

    • Observer:解决一份数据多种表现形式问题。
    • Composite:嵌套 has-a 的形式。
    • Prototype:框架已经写好,框架中会创建子类对象,但是未知子类可能很长时间以后才会定义。

    相关文章

      网友评论

          本文标题:GeekBand.重学C++(2)

          本文链接:https://www.haomeiwen.com/subject/lodklttx.html