1 #include <iostream> 2 3 using namespace std; 4 5 class ComputeBase 6 { 7 public: 8 //virtual 拼写出错 9 //没写成纯虚函数,没有写实现,会出现链接错误 10 virtual double operation(double pre, double next) = 0; 11 }; 12 13 class Add: public ComputeBase 14 { 15 public: 16 virtual double operation(double pre, double next); 17 }; 18 19 double Add::operation(double pre, double next) 20 { 21 return pre+next; 22 } 23 24 class Sub: public ComputeBase 25 { 26 public: 27 virtual double operation(double pre, double next); 28 }; 29 30 double Sub::operation(double pre, double next) 31 { 32 return pre - next; 33 } 34 35 class Mul: public ComputeBase 36 { 37 public: 38 virtual double operation(double pre, double next); 39 }; 40 41 double Mul::operation(double pre, double next) 42 { 43 return pre * next; 44 } 45 46 class Div: public ComputeBase 47 { 48 public: 49 virtual double operation(double pre, double next); 50 }; 51 52 double Div::operation(double pre, double next) 53 { 54 if(next == 0) 55 { 56 cout << "除数不能为0" << endl; 57 return 0; 58 } 59 return pre / next; 60 } 61 class Simplefactory 62 { 63 private: 64 ComputeBase * pBase; 65 public: 66 Simplefactory(unsigned char cInput); 67 ~Simplefactory(); 68 double compute(double pre, double next); 69 }; 70 71 Simplefactory::Simplefactory(unsigned char cInput) 72 { 73 switch(cInput) 74 { 75 case '+': 76 pBase = new Add; break; 77 case '-': 78 pBase = new Sub; break; 79 case '*': 80 pBase = new Mul; break; 81 case '/': 82 pBase = new Div; break; 83 default: 84 cout << "undifined compution!" <<endl; 85 } 86 } 87 88 Simplefactory::~Simplefactory() 89 { 90 if(pBase != NULL) 91 delete pBase; 92 } 93 double Simplefactory::compute(double pre, double next) 94 { 95 return pBase->operation(pre, next); 96 } 97 98 int main() 99 { 100 double pre, next; 101 char cCompute; 102 cout << "Please input two operators:" << endl; 103 cin >> pre >> next; 104 cout << "Please input the computor " << endl; 105 cin >> cCompute; 106 Simplefactory fact(cCompute); 107 cout << fact.compute(pre, next) << endl; 108 return 0; 109 }
相关文章: