c++工厂模式,怎么样在出错之后还能继续运算?
代码:
#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