《大话设计模式》读书笔记之C++实现--chapter1运算工厂类(简单计算器)

	本文是大话设计模式的读书笔记,帮助读者从面向过程的编程思想到面向对象的思想的转变,实现从理解C++基本的语法到深入理解面向对象的三大特性--封装、继承和多态,以一个简单的四则运算计算器开始面向对象的旅程。
#include<iostream>
using namespace std;

//运算类
class Operate {
public:
	virtual double getResult()=0;
	void setNum1(double num1);
	void setNum2(double num2);
	double getNum1();
	double getNum2();
private:
	double number1;
	double number2;
};

//运算工厂类,通过指向不同的运算类实现调用不同的运算功能
class OperateFactory {
public:
	Operate* creatOperate(char type);
};

//加法类
class OperateAdd :public Operate {
public:
	virtual double getResult();
};

//减法类
class OperateSub :public Operate {
public:
	virtual double getResult();
};

//乘法类
class OperateMul :public Operate {
public:
	virtual double getResult();
};


//除法类
class OperateDiv :public Operate {
public:
	virtual double getResult();
};

//以下为类外定义的函数
void Operate::setNum1(double num1)
{
	number1 = num1;
}

void Operate::setNum2(double num2)
{
	number2 = num2;
}

double Operate::getNum1()
{
	return number1;
}

double Operate::getNum2()
{
	return number2;
}

double OperateAdd::getResult()
{
	double result = 0;
	result = getNum1() + getNum2();
	return result;
}

double OperateSub::getResult()
{
	double result = 0;
	result = getNum1() - getNum2();
	return result;
}

double OperateMul::getResult()
{
	double result = 0;
	result = getNum1() * getNum2();
	return result;
}

double OperateDiv::getResult()
{
	double result = 0;
	double tmp1 = getNum1();
	double tmp2 = getNum2();
	if (tmp2 == 0)
		cout << "除数不能为0" << endl;
	else
		result = tmp1/tmp2;
	return result;
}

Operate * OperateFactory::creatOperate(char type)
{
	Operate* p_Operate;
	switch (type)
	{
	case'+':
		p_Operate = new OperateAdd;
		break;

	case'-':
		p_Operate = new OperateSub;
		break;

	case'*':
		p_Operate = new OperateMul;
		break;

	case'/':
		p_Operate = new OperateDiv;
		break;

	}
	return p_Operate;
}

//客户端(主函数)  
void main()
{
	Operate* oper = NULL;

	OperateFactory of;
	oper = of.creatOperate('/');
	oper->setNum1(10);
	oper->setNum2(152);
	cout << oper->getResult() << endl;
	if (oper != NULL)
	{
		delete oper;
		oper = NULL;
	}
	system("pause");
}




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值