c++ 實現工廠模式
阿新 • • 發佈:2019-01-08
工廠模式大家都很熟悉了,就是利用多型,利用基類指標指向新生成的派生類,用該指標呼叫派生類的函式。
今天看《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; }