总:虚函数
- 非虚函数:不希望子类重新定义
- 虚函数:子类重新定义
- 纯虚函数:希望子类一定要重新定义,没有默认定义
类的继承是继承的调用权
一. 使用虚函数进行继承
- 读文件的操作不能提前确认 (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 混合
网友评论