大話設計模式中簡單工廠模式的計算器例項的C++程式碼
阿新 • • 發佈:2018-12-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; }