C++设计模式学习笔记一:简单工厂模式
来源:互联网 发布:nginx安装指定配置目录 编辑:程序博客网 时间:2024/05/17 10:53
最近在学习设计模式,很多人说《大话设计模式》比较适合入门,就拿来看看。但是,书里的代码实现全是C#的,于是想用C++实现一遍。
简单工厂模式代码实现如下:
Operation.h实现如下:
#pragma once#include "OperationLib.h"#include <string>using namespace std;enum OperatorEnum{ADD,SUB,MUL,DIV,UNKNOW};class OPERATIONLIB_API COperation{public:COperation(void);~COperation(void);COperation(double numA, double numB);virtual double GetResult();public:static double m_NumberA;static double m_NumberB;};class COperationAdd: public COperation{public:virtual double GetResult();};class COperationSub: public COperation{public:virtual double GetResult();};class COperationMul: public COperation{public:virtual double GetResult();};class COperationDiv: public COperation{public:virtual double GetResult();};class COperationSqr: public COperation{public:virtual double GetResult();};class COperationSqrt: public COperation{public:virtual double GetResult();};class COperationReverse: public COperation{public:virtual double GetResult();};//////////////////////////////////////////////////////////////////////////class OPERATIONLIB_API COperationFactory{public:static COperation* CreateOperation(std::string sOper);};
Operation.cpp 代码如下:
#include "StdAfx.h"#include "Operation.h"double COperation::m_NumberA = 0;double COperation::m_NumberB = 0;COperation::COperation(void){}COperation::COperation(double numA, double numB){m_NumberA = numA;m_NumberB = numB;}COperation::~COperation(void){}double COperation::GetResult(){double result = 0;return result;}double COperationAdd::GetResult(){double result = 0;result = m_NumberA + m_NumberB;return result;}double COperationSub::GetResult(){double result = 0;result = m_NumberA - m_NumberB;return result;}double COperationMul::GetResult(){double result = 0;result = m_NumberA * m_NumberB;return result;}double COperationDiv::GetResult(){double result = 0;if (0 == m_NumberB){throw m_NumberB;}result = m_NumberA / m_NumberB;return result;}//////////////////////////////////////////////////////////////////////////OperatorEnum StringToEmun(std::string strOper){if (0 == strOper.compare("+")){return ADD;}else if (0 == strOper.compare("-")){return SUB;}else if (0 == strOper.compare("*")){return MUL;}else if (0 == strOper.compare("/")){return DIV;}return UNKNOW;}COperation* COperationFactory::CreateOperation(std::string sOper){OperatorEnum enumOper = StringToEmun(sOper);COperation* oper = NULL;switch(enumOper){case ADD:{oper = new COperationAdd;break;}case SUB:{oper = new COperationSub;break;}case MUL:{oper = new COperationMul;break;}case DIV:{oper = new COperationDiv;break;}}return oper;}
OperationMain.cpp 实现如下:
// OperationMain.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>#include <string>#include "Operation.h"using namespace std;int _tmain(int argc, _TCHAR* argv[]){try{double NumA, NumB;std::string strOper;cout<<"请输入数字A:";cin>>NumA;cout<<"请选择运算符号(+、-、*、/):";cin>>strOper;cout<<"请输入数字B:";cin>>NumB;COperation* oper = new COperation(NumA, NumB);oper = COperationFactory::CreateOperation(strOper);double result = oper->GetResult();cout<<"计算结果:"<<result<<endl;}catch (...){cout<<"输入的数据有误!"<<endl;}return 0;}
0 0
- C++设计模式学习笔记一:简单工厂模式
- 一、简单工厂模式——设计模式学习笔记
- 设计模式笔记一:简单工厂模式
- 【设计模式】简单工厂模式学习笔记
- 设计模式学习笔记--简单工厂模式
- 设计模式学习笔记--简单工厂模式
- 设计模式学习笔记-简单工厂模式
- 设计模式学习笔记(一) 简单工厂
- 设计模式学习笔记二-(简单工厂)
- 学习设计模式笔记--简单工厂
- 工厂设计模式一 简单工厂模式
- 设计模式学习笔记一 简单工厂策略模式实现销售策略的变更(一)
- 设计模式学习笔记——简单工厂模式、工厂方法模式、抽象工厂模式
- 设计模式-工厂模式 抽象工厂模式 简单工厂模式学习笔记
- 研磨设计模式笔记(一)之简单工厂模式
- C#设计模式学习笔记(一) 之 简单工厂模式
- 设计模式一 简单工厂设计模式
- 设计模式学习(一):简单工厂模式练习
- Eclipse - 循环cin的输出如何终止
- volatile
- Android优化UI规则
- UVA-10025-The ? 1 ? 2 ? ... ? n = k problem
- Swap Nodes in Pairs
- C++设计模式学习笔记一:简单工厂模式
- Hadoop在CentOS下挂载多块数据硬盘
- mysql JDBC URL参数解析
- 创建PowerShell脚本数字签名认证
- 设计模式之中介者模式
- 迈向系统架构师
- nginx的filter的处理
- android aidl 用法实现
- 怎样在C#中调用Delphi6写的DLL