您的位置:首页 > 编程语言 > C语言/C++

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

2017-03-29 21:37 363 查看
本文是大话设计模式的读书笔记,帮助读者从面向过程的编程思想到面向对象的思想的转变,实现从理解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");
}




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 设计模式
相关文章推荐