// 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;
}