狂言设计模式中简单工厂模式的计算器实例的C++代码
大话设计模式中简单工厂模式的计算器实例的C++代码
这里只是实现了加减乘除,和书中的C#实现的方法基本相似。
#include <iostream> #include <string> using namespace std; //Operation运算类 class Operation { private: double _numberA; double _numberB; public: Operation(){} Operation(double numA,double numb):_numberA(numA),_numberB(numb) { } virtual double GetResult() { double result = 0; return result; } void set_numberA(double numA) { _numberA = numA; } void set_numberB(double numB) { _numberB = numB; } double get_numberA() { return _numberA; } double get_numberB() { return _numberB; } }; //加减乘除类 class OperationAdd: public Operation { public: OperationAdd() { } OperationAdd(double numA,double numB):Operation(numA,numB){} double GetResult() { double result = 0; result = get_numberA()+get_numberB(); return result; } }; class OperationSub:public Operation { public: OperationSub() { } OperationSub(double numA,double numB):Operation(numA,numB){} double GetResult() { double result = 0; result = get_numberA()+get_numberB(); return result; } }; class OperationMul: public Operation { public: OperationMul() { } OperationMul(double numA,double numB):Operation(numA,numB){} double GetResult() { double result = 0; result = get_numberA()+get_numberB(); return result; } }; class OperationDiv:public Operation { public: OperationDiv() { } OperationDiv(double numA,double numB):Operation(numA,numB){} double GetResult() { double result = 0; if( get_numberB() == 0){ throw new exception("除数不能为零"); } result = get_numberA()+get_numberB(); return result; } }; //简单运算工厂类 class OperationFactory { public: Operation* createOperate(char operate) { Operation *oper; switch(operate){ case '+': oper = new OperationAdd(); break; case '-': oper = new OperationSub(); break; case '*': oper = new OperationMul(); break; case '/': oper = new OperationDiv(); break; } return oper; } }; int main() { Operation *oper; OperationFactory operFactory; oper = operFactory.createOperate('+'); oper->set_numberA(1); oper->set_numberB(2); double result = oper->GetResult(); cout<<"result = "<<result<<endl; }