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

来源:互联网 发布:公安网络监控 编辑:程序博客网 时间:2024/05/13 19:55

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 0
原创粉丝点击