c++ 实现工厂模式

来源:互联网 发布:两点最短路径算法 编辑:程序博客网 时间:2024/04/29 05:49

        工厂模式大家都很熟悉了,就是利用多态,利用基类指针指向新生成的派生类,用该指针调用派生类的函数。

今天看《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;}


原创粉丝点击