c++工厂模式,怎么样在出错之后还能继续运算?

wzfxyer 2008-10-31 08:09:56
代码:
#include "stdafx.h"
#include <iostream>
using namespace std;

class Operate
{
public:
double numberA;
double numberB;
double result;
public:
void Set(double numA,double numB)
{
numberA=numA;
numberB=numB;
}

virtual double GetResult()
{
return result;
}


};

class OperateAdd:public Operate
{
double GetResult()
{
result=numberA+numberB;
return result;
}
};

class OperateSub:public Operate
{
double GetResult()
{
result=numberA-numberB;
return result;
}
};

class OperateMul:public Operate
{
double GetResult()
{
result=numberA*numberB;
return result;
}
};
class OperateDiv:public Operate
{
double GetResult()
{
if (numberB==0)
{
cout<<"Please check your seconed value.\n";
return -1;

}
result=numberA/numberB;
return result;
}
};
class Factory
{
public:

static Operate *Make(char operation)
{
//
Operate *oper=NULL;

switch (operation)
{
case '+':
{
oper= new OperateAdd();
//OperateAdd oper;

break;
}
case'-':
{
oper= new OperateSub();
//OperateSub oper;
break;
}
case'*':
{
oper= new OperateMul();
//OperateMul oper;
break;
}
case'/':
{
oper= new OperateDiv();
//OperateDiv oper;
break;
}
default:
cout<<"This computer can't supply service for your demand."<<endl;
break;
}

return oper;
}


};

int _tmain(int argc, _TCHAR* argv[])
{
double inputNumA,inputNumB;
char inputOperation;
Operate *oper;
double result;
cout<<"Please press enter and input ;"<<endl<<"And input a to exit!"<<endl;
while (getchar()!='a')
{
cout<<"please input a computer between two number:";
cin>>inputNumA>>inputOperation>>inputNumB;
if(!cin) //如果类型不对或者没有输入直接回车,即a没有得到值,cin会产生一个bad的状态
{
cout <<"input error!" <<endl; //输出信息
cin.clear(); //清除当前状态
cin.sync(); //清除数据,清空输入流(比如类型不对,a没有得到值)
cout<<"Please press enter and input again;"<<endl;
}
else
{
cout <<inputNumA<<inputOperation<<inputNumB<<endl;
oper=Factory::Make(inputOperation);
if (oper==NULL)
{
getchar();
getchar();
getchar();


break;
}
else
{

//factory.Make(inputOperation);
oper->Set(inputNumA,inputNumB);
result=oper->GetResult();
cout<<"The result is :"<<result<<endl;

cout<<"Please press enter and input again;"<<endl<<"And input a to exit!"<<endl;
//break; //主动跳出
}

getchar();
}

}
return 0;
}

就是当输入2&3时,会出错,怎么能输出出错信息后还能进行计算。
不用goto
...全文
47 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzfxyer 2008-10-31
  • 打赏
  • 举报
回复
谢了再去看看。。
matrixdwy 2008-10-31
  • 打赏
  • 举报
回复
try...catch

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧