美文网首页
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

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