#include "stdafx.h"
#include <string.h>
using namespace std;
enum Op_Type
{
Op_Add = 0,
Op_Sub = 1,
Op_Nul = 2,
Op_Div = 3
};
class Myoperator
{
public:
Myoperator()
{
result = 0;
numA = numB = 0;
}
virtual ~Myoperator()
{
}
virtual double getResult()
{
result = 0;
return result;
}
//检测输入的字符是否合法
static string checkNumberInput(string currentNumber, string inputString)
{
string result = "";
if (inputString == ".")
{
if (strstr(result.c_str(),".")==NULL)
{
if (currentNumber.size() == 0)
result = "0" + inputString;
else
result = currentNumber + inputString;
}
}
else if (currentNumber == "0")
{
result = inputString;
}
else
{
result = currentNumber + inputString;
}
return result;
}
double getNumA()
{
return numA;
}
double getNumB()
{
return numB;
}
protected:
double numA;
double numB;
double result;
private:
};
class operatorAdd : public Myoperator
{
public:
virtual double getResult()
{
result = numA+numB
return result;
}
protected:
private:
};
class operatorSub : public Myoperator
{
public:
virtual double getResult()
{
result = numA-numB
return result;
}
protected:
private:
};
class operatorNul : public Myoperator
{
public:
virtual double getResult()
{
result = numA*numB
return result;
}
protected:
private:
};
class operatorDiv : public Myoperator
{
public:
virtual double getResult()
{
ASSERT(numB!=0)
result = numA/numB
return result;
}
protected:
private:
};
class operatorFactory
{
public:
operatorFactory()
{
m_op = NULL;
}
~operatorFactory()
{
delete m_op;
m_op = NULL;
}
Myoperator* createOperate(Op_Type o_type)
{
switch (o_type)
{
case Op_Add:
m_op = new operatorAdd();
break;
case Op_Sub:
m_op = new operatorSub();
break;
case Op_Nul:
m_op = new operatorNul();
break;
case Op_Div:
m_op = new operatorDiv();
break;
}
return m_op;
}
protected:
private:
Myoperator*m_op;
};
int _tmain(int argc, _TCHAR* argv[])
{
operatorFactory*m_opFac = new operatorFactory();
Myoperator*m_op = m_opFac->createOperate(Op_Nul);
//...........................
return 0;
}