大话设计模式中简单工厂模式的计算器实例的C++代码

来源:互联网 发布:腾讯云申请域名绿标 编辑:程序博客网 时间:2024/05/18 00:27

这里只是实现了加减乘除,和书中的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;}





原创粉丝点击