C++ 类中复合就是一个类中放着另一个类的对象,然后可以在类函数中通过另一个类对象调用函数。
这种复合的结构,在执行构造时是由内向外进行构造,析构的时候是由外到内进行析构
委托这种设计方法,类中放着另一个类的指针
类的继承
对于继承,子类对象,内部有父类的成分。
构造的时候,先构造父类,再构造子类
析构的时候,先析构子类,再析构父类
虚函数
#include <iostream>
using namespace std;
class CDocument
{
public:
void OnFileOpen()
{
cout << "dialog..." << endl;
cout << "check file status..." << endl;
cout << "open file..." << endl;
Serialize();
cout << "close file..." << endl;
cout << "update all views..." << endl;
}
virtual void Serialize() {};
};
class CMyDoc : public CDocument
{
public:
virtual void Serialize() {
cout << "CMyDoc::Serialize" << endl;
}
};
int main()
{
CMyDoc myDoc;
myDoc.OnFileOpen();
}
同时有继承和组合
class Observer
{
public:
virtual void update(Subject* sub, int value) = 0;
};
class Subject
{
int m_value;
vector<Observer*> m_views;
public:
void attach(Observer* obs) {
m_views.push_back(obs);
}
void set_val(int value) {
m_value = value;
notify();
}
void notify() {
for (int i = 0; i < m_views.size(); i++)
m_views[i]->update(this, m_value);
}
};
下图描述了组合模式这种设计模式, Primitive可具体为文件, Composite可具体为目录,上面代码描述了文件和目录。