工厂模式大家都很熟悉了,就是利用多态,利用基类指针指向新生成的派生类,用该指针调用派生类的函数。
今天看《effective c++》写代码主要是练习一下,代码中类实现没有考虑太多的构造函数及虚构函数,各位见谅。
#include<iostream>
#include<string>
using namespace std;
class Operation
{
public:
void setNumA(double d1)
{
numA = d1;
}
void setNumB(double d2)
{
numB = d2;;
}
double getNumA() const
{
return numA;
}
double getNumB() const
{
return numB;
}
double virtual getResult() = 0;
private:
double numA;
double numB;
};
class OperationAdd : public Operation
{
public:
double getResult();
};
double OperationAdd::getResult()
{
return getNumA() + getNumB();
}
class OperationSub : public Operation
{
public:
double getResult();
};
double OperationSub::getResult()
{
return getNumA() - getNumB();
}
class OperationMul : public Operation
{
public:
double getResult();
};
double OperationMul::getResult()
{
return getNumA() * getNumB();
}
class OperationDiv : public Operation
{
public:
double getResult();
};
double OperationDiv::getResult()
{
if (getNumB() == 0)
{
cout << " the divisor can't be zero " << endl;
throw runtime_error("the divisor can't be zero");
}
return getNumA() / getNumB();
}
class OperationFactory
{
public:
static Operation * createOperation(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;
default:
cout << " can't reconginze the operate " << endl;
oper = 0;
}
return oper;
}
};
int main()
{
double numA;
double numB;
char operate;
cout << " Please input two params " << endl;
cout << " numA = ";
cin >> numA;
cout << " numB = ";
cin >> numB;
OperationFactory factory;
cout << "Please input operate : ";
cin>> operate;
Operation *operation = factory.createOperation(operate);
operation->setNumA(numA);
operation->setNumB(numB);
cout << " The result of " << numA << " " << operate <<" " << numB << " = " << operation->getResult() << endl;
delete operation;
system("pause");
return 0;
}


被折叠的 条评论
为什么被折叠?



