程序代码如下:
#include <iostream>
using namespace std;
//运算类
class Coperation{
public:
Coperation()
{
cout<<"Coperation constriction"<<endl;
}
virtual ~Coperation()
{
cout<<"Coperation destriction"<<endl;
}
double Get_numberA();
void Set_numberA(double n);
double Get_numberB();
void Set_numberB(double n);
virtual double Get_Result()
{
double result = 0;
return result;
}
private:
double m_numberA;
double m_numberB;
};
double Coperation::Get_numberA()
{
return m_numberA;
}
void Coperation::Set_numberA(double n)
{
m_numberA = n;
}
double Coperation::Get_numberB()
{
return m_numberB;
}
void Coperation::Set_numberB(double n)
{
m_numberB = n;
}
//加法类
class COperation_Add:public Coperation{
public:
COperation_Add()
{
cout<<"COperation_Add constriction"<<endl;
}
~COperation_Add()
{
cout<<"COperation_Add destriction"<<endl;
}
double Get_Result();
};
double COperation_Add::Get_Result()
{
double result = 0;
result = Get_numberA() + Get_numberB();
return result;
}
//减法类
class COperation_Sub:public Coperation{
public:
COperation_Sub()
{
cout<<"COperation_Sub constriction"<<endl;
}
~COperation_Sub()
{
cout<<"COperation_Sub dsetriction"<<endl;
}
double Get_Result();
};
double COperation_Sub::Get_Result()
{
double result = 0;
result = Get_numberA() - Get_numberB();
return result;
}
//乘法类
class COperation_Multi:public Coperation{
public:
COperation_Multi()
{
cout<<"COperation_Multi constriction"<<endl;
}
~COperation_Multi()
{
cout<<"COperation_Multi destriction"<<endl;
}
double Get_Result();
};
double COperation_Multi::Get_Result()
{
double result = 0;
result = Get_numberA() * Get_numberB();
return result;
}
//除法类
class COperation_Div:public Coperation{
public:
COperation_Div()
{
cout<<"COperation_Div constriction"<<endl;
};
~COperation_Div()
{
cout<<"COperation_Div destriction"<<endl;
}
double Get_Result();
};
double COperation_Div::Get_Result()
{
try
{
double result = 0;
if(Get_numberB() == 0)
throw "invalid argument(s)";
result = Get_numberA() / Get_numberB();
return result;
}
catch(double n)
{
cout<<"B is:"<<n<<endl;
}
}
//运算工厂类
class COperationFactory{
public:
COperationFactory();
~COperationFactory();
Coperation *Get_piont_oper();
void CreateOperate(char operate)
{
switch(operate)
{
case '+':
oper = new COperation_Add();
break;
case '-':
oper = new COperation_Sub();
break;
case '*':
oper = new COperation_Multi();
break;
case '/':
oper = new COperation_Div();
break;
}
}
public:
Coperation *oper;
};
COperationFactory::COperationFactory()
{
oper = NULL;
cout<<"COperationFactory constriction"<<endl;
}
COperationFactory::~COperationFactory()
{
delete oper;
cout<<"COperationFactory destriction"<<endl;
}
Coperation *COperationFactory::Get_piont_oper()
{
return oper;
}
int main(void)
{
Coperation *oper;
COperationFactory op_factory;
char c = '+';
op_factory.CreateOperate(c);
op_factory.Get_piont_oper()->Set_numberA(1);
op_factory.Get_piont_oper()->Set_numberB(2);
double add_result = op_factory.Get_piont_oper()->Get_Result();
cout << op_factory.Get_piont_oper()->Get_numberA()<<" + "<<op_factory.Get_piont_oper()->Get_numberB()<< " = "<<add_result<<endl;
return 0;
}
运行结果