美文网首页
Geekband C++ Week3 Notes

Geekband C++ Week3 Notes

作者: current | 来源:发表于2016-03-15 22:51 被阅读16次
  • 面向对象编程

  • 对象之间的关系

    • 继承
    • 组合
    • 委托
  • 组合关系

    • 表达了has-a的关系
    • 组合关系下的构造和析构
      • 构造由内向外
      • 析构由外向内
  • 委托关系

    • 由引用构造的组合关系
      • 延迟实现类的构造
    • pimpl手法
      • 实现引用计数
      • 进一步实现COW
      • 隐藏实现
      • 本质上是对RAII进一步强化
      • 肯定会带来一些性能损失
      • 不使用虚函数的时候也许可以改善ABI兼容性?不太确定
      • 代码写起来实在是很脑裂。。尤其是类结构比较复杂的情况下
  • 继承关系

    • 表达了is-a的关系
    • 继承关系下的构造和析构
      • 构造由内而外
      • 析构由外而内
    • base class的dtor必须为virtual,否则为UB
    • 在继承体系中,函数的继承实质上继承的是『函数的调用权』
  • 虚函数

    • non-virtual函数,不希望派生类override这个函数
    • virtual函数,希望派生类override这个函数,但提供了默认实现
    • pure virtual函数,要求派生类必须override这个函数,因而不提供默认实现
  • 继承和组合联合使用情况下的构造和析构

    • 使用了组合关系的派生类
    • 派生一个使用了组合关系的父类
  • 委托和继承联合使用

    • Observer模式
  • 与委托相关的设计

    • 组成模式(Composite)
    • 原型模式(Prototype)
      • 和js的原型链模型不知道啥关系,不懂js
      • 静态成员不一定必须,看需求吧
      • 本周作业的场景适合使用prototype模式
        • 本周作业中,后续对Shape*数组进行部分或全部深拷贝的时候,由于Shape是一个抽象类,无法实例化
          • 知道每个指针指向实例的具体类型的话,可以强转一下再拷贝,如Shape* t = new Circle(*(dynamic_cast<Circle*>(shape_ptr)))
          • 不知道具体类型的话,用typeid()挨个试也是个办法,不过极为丑陋,本质上和dynamic_cast都是基于RTTI来做
          • 在Shape里面提供virtual Shape* clone() const = 0;可以很好的解决这个问题

相关文章

  • Geekband C++ Week3 Notes

    面向对象编程 对象之间的关系继承组合委托 组合关系表达了has-a的关系组合关系下的构造和析构构造由内向外析构由外...

  • GeekBand C++ Week3 Notes

    Week3 notes A.面向对象编程,面向对象设计 composition,复合表示has-a templat...

  • GeekBand C++ Week1 Notes

    GeekBand C++ Week1 Notes A.OOP-面向对象编程 1基础:C语言 -变量variable...

  • GeekBand C++ WEEK3

    一 . 关于类型转换 1. conversion function (转换函数) —— “转出去” 类型转换函数的...

  • GeekBand C++ week3

    一、导论 1.I和II的区别 I:C++面向对象程序设计II: C++程序设计兼谈对象模型 勿在浮沙筑高台 2.C...

  • GeekBand C++ Week7 Notes

    Week7 Notes 容器Containers Stack 也是一个线性容器,是一种先进后出FILO的数据结构,...

  • GeekBand C++ Week8 notes

    Week8 Notes 变易算法: copy:对象拷贝 templateinlineOutIt copy(InIt...

  • GeekBand C++ Week9 Notes

    C++设计模式 为了理解松耦合设计思想,掌握面向对象设计原则 什么是设计模式? 是一种解决方案的核心,可以避免重复...

  • GeekBand C++ Week10 Notes

    工厂方法:factory method 其实是当我们在类里面要实例化一个类的时候,有可能有多种情况出现,需要创建的...

  • GeekBand C++ Week6 Notes

    STL和泛型编程 Week6 Notes 1.模板概念和模板函数 C++模板简介 概观 为什么会有模板这个概念 S...

网友评论

      本文标题:Geekband C++ Week3 Notes

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