/*
**计算机控制台程序
**要求体现面向对象的思想
*/
#include <iostream>
#include <string>
using namespace std;
//运算类(基类 抽象类)
class Operation
{
public:
Operation(double _numberA = 0.0, double _numberB = 0.0)
:numberA(_numberA), numberB(_numberB){}
void SetNumberA(double _numberA)
{
numberA = _numberA;
}
void SetNumberB(double _numberB)
{
numberB = _numberB;
}
virtual double GetResult() = 0;
protected:
double numberA;
double numberB;
};
//加减乘除类(派生类)
//加
class OperationAdd : public Operation
{
public:
double GetResult();
private:
double result = 0.0;
};
double
OperationAdd::GetResult()
{
result = numberA + numberB;
return result;
}
//减
class OperationSub : public Operation
{
public:
double GetResult();
private:
double result = 0.0;
};
double
OperationSub::GetResult()
{
result = numberA - numberB;
return result;
}
//乘
class OperationMul : public Operation
{
public:
double GetResult();
private:
double result = 0.0;
};
double
OperationMul::GetResult()
{
result = numberA * numberB;
return result;
}
//除
class OperationDiv : public Operation
{
public:
double GetResult();
private:
double result = 0.0;
};
double
OperationDiv::GetResult()
{
if (numberB == 0)
throw;
result = numberA / numberB;
return result;
}
//运算工厂函数
Operation* createOperate(char operate)
{
Operation *oper = NULL;
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()
{
double numberA, numberB, result;
char c;
cout << "numberA = ";
cin >> numberA;
cout << " numberB = ";
cin >> numberB;
cout << endl;
cout << "what do you want to do? ";
cin >> c;
Operation* oper = createOperate(c);
oper->SetNumberA(numberA);
oper->SetNumberB(numberB);
result = oper->GetResult();
cout << " result is:" << result << endl;
}
大话设计模式一:代码无错就是优----简单工厂模式
最新推荐文章于 2022-12-17 22:50:00 发布