您的位置:首页 > 编程语言 > C语言/C++

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

2012-08-05 13:45 585 查看
这里只是实现了加减乘除,和书中的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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: