#include <iostream>
#include <vector>
#include <string>
#include <iostream>
#include <map>
using namespace std;
#define __THROW_ZERO do {cerr << "The dividend is 0" << endl; exit(1);}while(0);
/*
简单工厂处理计算器问题
*/
enum op{
ADD=0,
SUB,
MUL,
DIV,
};
class Operation{
protected:
double _numA,_numB;
public:
void set_num(double __A,double __B){
_numA=__A;
_numB=__B;
}
double get_numA(){
return _numA;
}
double get_numB(){
return _numB;
}
virtual double result()=0;
};
class OperationAdd : public Operation{
double result() override{
return _numA+_numB;
}
};
class OperationDiv : public Operation{
double result() override{
if(0==_numB) __THROW_ZERO
return _numA+_numB;
}
};
class OperationSub : public Operation{
double result() override{
return _numA-_numB;
}
};
class OperationMul : public Operation{
double result() override{
return _numA*_numB;
}
};
class OperationFactory{
public:
static Operation *createOperate(op o){
Operation *oper=nullptr;
switch (o) {
case ADD:
oper = new OperationAdd();
break;
case SUB:
oper = new OperationSub();
break;
case MUL:
oper = new OperationMul();
break;
case DIV:
oper = new OperationDiv();
break;
}
return oper;
}
};
map<char,op> G_mp={{'+',ADD},{'-',SUB},{'*',MUL},{'/',DIV}};
int main(int argc, char *argv[]) {
int A,B;
char char_op;
while(1){
cin>>A>>char_op>>B;
auto oper= OperationFactory::createOperate(G_mp[char_op]);
oper->set_num(A, B);
cout<<oper->result()<<endl;
}
}
简单工厂模式实现计算器
于 2022-06-26 12:10:53 首次发布