⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 更改3_面向对象_工厂模式.cpp

📁 设计模式:工厂模式、单例模式的基本实现
💻 CPP
字号:
#include <iostream>
using namespace std;

class Operation
{
protected:
	double _numberA;
	double _numberB;
	double _result;
public:
	void setNumberA(int numberA)
	{
		_numberA = numberA;	
	}
	void setNumberB(int numberB)
	{
		_numberB = numberB;	
	}
	virtual double getResult()=0;	
	
};

class OperationAdd: public Operation
{
public:
	double getResult()
	{
		_result = _numberA + _numberB;
		return _result;
	}
};






class OperationSub: public Operation
{
public:
	double getResult()
	{
		_result = _numberA - _numberB;
		return _result;
	}
};

class OperationMul: public Operation
{
public:
	double getResult()
	{
		_result = _numberA * _numberB;
		return _result;
	}
};

class OperationDiv: public Operation
{
public:
	double getResult()
	{
		if(_numberB == 0)
		{
			throw "除数不能为0.";
		}
		else
		{
			_result = _numberA / _numberB;
		}
		return _result;
	}
};








class OperationFactory
{
public:
	static Operation* createOperate(char);
};








Operation* OperationFactory::createOperate(char operate)
{
	Operation *oper = NULL;
	
	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()
{
	int nA;
	int nB;
	char cOper;
	
	cout << "请输入数A:";
	cin >> nA;
	cout << "请输入数B:";
	cin >> nB;
	cout << "请输入操作符:";
	cin >> cOper;

	Operation *oper;

	oper = OperationFactory::createOperate(cOper);

	oper->setNumberA(nA);
	oper->setNumberB(nB);

	double result = oper->getResult();

	cout << "结果是: " << result << endl;

	delete oper;

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -