C++ 面向对象编程设计 复合与委托

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可具体为目录,上面代码描述了文件和目录。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值