#include <iostream>
using namespace std;
class Operation
{
public:
Operation() {}
Operation(const double& dNumberOne, const double& dNumberTwo) : m_dNumberOne(dNumberOne), m_dNumberTwo(dNumberTwo) {}
const double getNumberOne() { return m_dNumberOne; }
void setNumberOne(const double& dNumberOne) { m_dNumberOne = dNumberOne; }
const double getNumberTwo() { return m_dNumberTwo; }
void setNumberTwo(const double& dNumberTwo) { m_dNumberTwo = dNumberTwo; }
virtual double getResult() { return 0; }
static Operation* createOperation(string strOperation, const double& dNumberOne = 0, const double& dNumberTwo = 0);
private:
double m_dNumberOne = 0;
double m_dNumberTwo = 0;
};
class OperationAdd : public Operation
{
public:
OperationAdd() {}
OperationAdd(const double& dNumberOne, const double& dNumberTwo) : Operation(dNumberOne, dNumberTwo) {}
virtual double getResult() override
{
return (Operation::getNumberOne() + Operation::getNumberTwo());
}
};
Operation* Operation::createOperation(string strOperation, const double& dNumberOne, const double& dNumberTwo)
{
Operation* objOperation = nullptr;
if (strOperation == "+")
{
objOperation = new OperationAdd(dNumberOne, dNumberTwo);
}
return objOperation;
}
int main()
{
Operation* objOperation;
string strOperation = "+";
double dNumberOne = 1;
double dNumberTwo = 2;
objOperation = Operation::createOperation(strOperation, dNumberOne, dNumberTwo);
cout << objOperation->getResult() << endl;
return 0;
}
总结:静态的createOperation函数创建需要的子类,多态调用正确的getResult函数得到结果