64,642
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include <iostream>
using std::cout;
using std::endl;
// 抽象类 -- 无法创建对象
class CStrategy
{
public:
virtual void AlgorithmInterface() = 0;
};
//具体算法A
class CConcreteStrategyA:public CStrategy
{
public:
CConcreteStrategyA()
{ }
virtual~CConcreteStrategyA()
{
}
//算法A实现方法
public:
virtual void AlgorithmInterface()
{
cout << "算法A实现" << endl;
}
};
//具体算法B
class CConcreteStrategyB:public CStrategy
{
public:
CConcreteStrategyB()
{ }
virtual~CConcreteStrategyB()
{
}
//算法B实现方法
public:
virtual void AlgorithmInterface()
{
cout << "算法B实现" << endl;
}
};
//具体算法C
class CConcreteStrategyC:public CStrategy
{
public:
CConcreteStrategyC()
{ }
virtual~CConcreteStrategyC()
{
}
//算法C实现方法
public:
virtual void AlgorithmInterface()
{
cout << "算法C实现" << endl;
}
};
//上下文
class CContext
{
public:
// 存在安全隐患
// CContext(CStrategy *strategy)
CContext(CStrategy* &strategy)
{
m_strategy = strategy;
}
virtual~CContext()
{
if (m_strategy)
{
delete m_strategy;
m_strategy = NULL;
}
}
public:
//上下文接口
virtual void ContextInterface()
{
m_strategy->AlgorithmInterface();
}
private:
CStrategy *m_strategy;
};
int _tmain(int argc, _TCHAR* argv[])
{
CConcreteStrategyA *pTmp = NULL;
pTmp = new CConcreteStrategyA();
CContext *pContextA = new CContext(pTmp);
pContextA->ContextInterface();
delete pTmp;
delete pContextA;
// CContext *pContextB = new CContext(new CConcreteStrategyB());
// pContextB->ContextInterface();
// delete pContextB;
//
// CContext *pContextC = new CContext(new CConcreteStrategyC());
// pContextC->ContextInterface();
// delete pContextC;
return 0;
}
#include "stdafx.h"
#include <iostream>
using namespace std;
int a = 3;
int b = 4;
void change1(int *&p)
{
p = &b;
}
void change2(int *p)
{
p = &b;
}
int _tmain(int argc, _TCHAR* argv[])
{
int *p1 = &a;
change1(p1);
cout<<*p1<<endl;//输出4
int *p2 = &a;
change2(p2);
cout<<*p2<<endl;//输出3
system("pause");
return 0;
}
CConcreteStrategyA *pTmp = NULL; //这里为啥不写成CStrategy* pTmp = new CConcreteStrategyA(); 呢?
pTmp = new CConcreteStrategyA();
CContext *pContextA = new CContext(pTmp);
pContextA->ContextInterface();
delete pTmp;
delete pContextA;
CContext *pContextA = new CContext((CStrategy*&)pTmp);