#include <iostream>
#include <string>
using namespace std;
class BaseNum
{
private:
int m_nNumA;
int m_nNumB;
public:
void SetA(int Avalue)
{
m_nNumA=Avalue;
}
void SetB(int Bvale)
{
m_nNumB=Bvale;
}
int GetA()
{
return m_nNumA;
}
int GetB()
{
return m_nNumB;
}
public:
BaseNum():m_nNumA(0),m_nNumB(0){}
virtual ~BaseNum(){};
virtual int GetResult()=0;
};
class OperatorAdd :public BaseNum
{
public:
int GetResult()
{
int nresult=GetA()+GetB();
return nresult;
}
};
class OperatorSub :public BaseNum
{
public:
int GetResult()
{
int nresult=GetA()-GetB();
return nresult;
}
};
class OperatorMul: public BaseNum
{
public:
int GetResult()
{
int nresult=GetA()*GetB();
return nresult;
}
};
class Divexception
{
private:
string m_strlineout;
public:
Divexception(string str)
{
m_strlineout=str;
cout<<m_strlineout;
}
};
class OperatorDiv:public BaseNum
{
public:
int GetResult()
{
try
{
if (GetB()==0)
{
throw Divexception("美女上门服务了!");
}
else
{
int nresult=GetA()/GetB();
return nresult;
}
}
catch (...)
{
return -99999;
}
}
};
class SimpleFactory
{
public:
BaseNum* pBase;
~SimpleFactory()
{
if (pBase)
{
delete pBase;
}
}
SimpleFactory()
{
pBase=NULL;
}
BaseNum* CreateOperator(string str)
{
if (str=="+")
{
return pBase=new OperatorAdd;
}
if (str=="-")
{
return pBase=new OperatorSub;
}
if (str=="*")
{
return pBase=new OperatorMul;
}
if (str=="/")
{
return pBase=new OperatorDiv;
}
}
};
#include "classbase.h"
int main()
{
BaseNum* pBase;
SimpleFactory factory;
pBase=factory.CreateOperator("/");
pBase->SetA(5);
pBase->SetB(1);
int nresult=pBase->GetResult();
cout<<nresult<<endl;
}
C++简单工厂
最新推荐文章于 2022-03-16 10:13:11 发布