勿在浮沙筑高台--P12 虚函数和多态

总:虚函数

  • 非虚函数:不希望子类重新定义
  • 虚函数:子类重新定义
  • 纯虚函数:希望子类一定要重新定义,没有默认定义
类的继承是继承的调用权

一. 使用虚函数进行继承

  • 读文件的操作不能提前确认 (Serialize())
  • 通过子类CmyDoc的对象调用父类CDocument的函数
    设计模式:Template Method
main(){
  CMyDoc myDoc;
   ...
   myDoc.OnFileOpen();
}

二. 委托 Delegation + 继承 Inheritance

设计模式:Observer

  • 应用场景:使用4个窗口查看同一个文件
class Observer{
  public:
    virtual void update(Subject* sub, int value)=0;
};

class Subject{
   int m_value;
   vector<Observer*> m_viewers;
public:
  void attach(Observer* obs){
     m_views.push_back(obs);
  }
  void set_value(int value)
  {
     m_value = value;
     notify();
  }
  void notify(){
       for(int i=0;i<m_views.size();++i)
          m_views[i]->update(this, m_value);
  }
};

设计模式:Composite 混合

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容