工厂模式
#include "bits/stdc++.h"
using namespace std;
//基类 进行操作
class Operation
{
protected:
/* data */
double _numberA = 0;
double _numberB = 0;
public:
virtual double getResult() = 0;
void setNumber(double A, double B)
{
_numberA = A;
_numberB = B;
};
~Operation(){};
};
//子类 进行具体的运算操作
class OpAdd : public Operation
{
public:
double getResult() override
{
return _numberA + _numberB;
}
};
class OpSub : public Operation
{
public:
double getResult() override
{
return _numberA - _numberB;
}
};
class OpMul : public Operation
{
public:
double getResult() override
{
return _numberA * _numberB;
}
};
class OpDiv : public Operation
{
public:
double getResult() override
{
if (_numberB == 0)
throw "除数不能为0";
return _numberA / _numberB;
}
};
//工厂类 用于产生对应类型的对象 将变化限制在工厂中
class OpFactory
{
public:
static Operation *createFactory(char opreate)
{
Operation *oper = nullptr;
switch (opreate)
{
case '+':
oper = new OpAdd();
break;
case '-':
oper = new OpSub();
break;
case '*':
oper = new OpMul();
break;
case '/':
oper = new OpDiv();
break;
default:
break;
}
return oper;
}
};
//界面逻辑
int main()
{
string op;
double a, b;
cin >> a >> op >> b;
Operation *oper = OpFactory::createFactory(op[0]);
oper->setNumber(a, b);
try
{
cout << "运算结果为: " << oper->getResult();
}
catch (const char *msg)
{
cout << msg;
}
return 0;
}