大话设计模式c++实现--简单工程模型

c++和书本中的c#代码上还是有些差别的,比如C++中的switch不能用于string,动态联编等问题。


// designpatten1.cpp : 定义控制台应用程序的入口点。

//
#include "stdafx.h"
#include<iostream>                                 //包含头文件
#include<stdlib.h>
#include<string>
#include<algorithm>

class Operation
{
public:
  virtual double GetResult()
  {
  std::cout <<"Operartion" << std::endl;
  double result = 0;
  return result;
  }
  
double NumebleA = 0;
double NumebleB = 0;
};
class OperationAdd :public Operation
{
public:
double  GetResult() override
{
std::cout << "+" << std::endl;
double result = 0;
result = NumebleA + NumebleB;
return result;
}
};

class OperationSub :public Operation
{
public:
double  GetResult() override
{
std::cout << "-" << std::endl;
double result = 0;
result = NumebleA- NumebleB;
return result;
}
};
class OperationMul :public Operation
{
public:
double  GetResult() override
{
std::cout << "*" << std::endl;
double result = 0;
result = NumebleA * NumebleB;
return result;
}
};
class OperationDiv :public Operation
{
public:
double  GetResult() override
{
std::cout << "/" << std::endl;
double result = 0;
if (NumebleB == 0)
{
std::cerr << "error of dividing zero.\n";
exit(1);
}//异常退出程序


result = NumebleA / NumebleB;
return result;
}
};


class OperationFactory
{
public:
static Operation* createOperate(char operate)
{
Operation *oper;
switch (operate)
{
case '+':
oper = new OperationAdd();
break;
case '-':
oper = new  OperationSub();
break;
case '*':
oper = new OperationMul();
break;
case '/':
oper = new OperationDiv();
break;
default:
{
std::cerr << "no such operate \n";
exit(1);
}
}
return oper;
}
};


//int _tmain(int argc, _TCHAR* argv[])
int main(int argc,  char **argv)
{
Operation *oper;

char operat;

double Numble_A,Numble_B;
std::cout << "please enter NumebleA:";
std::cin >> Numble_A;

std::cout << std::endl;

std::cout << "please enter operation:";
std::cin >> operat;
std::cout << std::endl;

std::cout << "please enter NumebleB:";
std::cin >> Numble_B;
std::cout << std::endl;

oper = OperationFactory::createOperate(operat);
oper->NumebleA = Numble_A;
oper->NumebleB = Numble_B;
double result = oper->GetResult();
std::cout <<"result="<< result << std::endl;
return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值