brideg pattern c++

// test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <boost/shared_ptr.hpp>
#include<boost/make_shared.hpp>
#include <vector>
#include <utility>
#include <iterator>
#include <string>
using namespace boost;
using std::vector;
using std::string;

class Sample
{
public:
	Sample(int val):m_val(val){}
	virtual ~Sample(){}
	bool operator == (const Sample & rhs)
	{
		return (this == &rhs) ? false : m_val == rhs.m_val;
	}
	inline int GetVal() const
	{
		return m_val;
	}
	virtual  void test() const =0;

private:
	int m_val;
};


class Sample1:public Sample
{
public:
	Sample1(int val ,double dval):Sample(val)
	{

	}
	~Sample1(){}
	virtual void test() const
	{
		_tprintf(_T("Sample1: test\r\n"));
	}
};


class Sample2:public Sample
{
public:
	Sample2(int val ,string str):Sample(val)
	{

	}
	~Sample2(){}
	virtual void test() const
	{
		_tprintf(_T("Sample2: test\r\n"));
	}
};


class Abstract
{
public:
	Abstract(shared_ptr<Sample>p):m_p(p){}
	virtual ~Abstract(){}
	void test()
	{
		m_p->test();
	}
private:
	shared_ptr<Sample> m_p;
};


class Derived1:public Abstract
{
public:
	Derived1(shared_ptr<Sample> p):Abstract(p)
	{
	}
	inline void test()
	{
		Abstract::test();
		_tprintf(_T("Derived1::test\r\n"));
	}
};


class Derived2:public Abstract
{
public:
	Derived2(shared_ptr<Sample> p):Abstract(p)
	{
	}
	inline void test()
	{
		Abstract::test();
		_tprintf(_T("Derived2::test\r\n"));
	}
};


int _tmain(int argc, _TCHAR* argv[])
{
	Derived1 obj(make_shared<Sample1>(10,2.0));
	obj.test();
	Derived2 obj2(make_shared<Sample2>(120,string("ceshi")));
	obj2.test();
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值