class GetResult {
public:
GetResult(){};
virtual ~GetResult(){};
public:
virtual void result(double x,double y) = 0;
};
class ResultAdd : public GetResult
{
public:
ResultAdd(){};
virtual ~ResultAdd(){};
public:
virtual void result(double x,double y)
{
cout <<x<<" + "<<y<<" = "<<(x + y)<< endl;
}
};
class ResultSub : public GetResult
{
public:
ResultSub(){};
virtual ~ResultSub(){};
public:
virtual void result(double x,double y)
{
cout <<x<<" - "<<y<<" = "<<(x - y)<< endl;
}
};
class ResultRide : public GetResult
{
public:
ResultRide(){};
virtual ~ResultRide(){};
public:
virtual void result(double x,double y)
{
cout <<x<<" x "<<y<<" = "<<(x * y)<< endl;
}
};
class ResultDIV : public GetResult
{
public:
ResultDIV(){};
virtual ~ResultDIV(){};
public:
virtual void result(double x,double y)
{
cout <<x<<" / "<<y<<" = "<<(x / y)<< endl;
}
};
class CreateOperate
{
public:
CreateOperate(){};
~CreateOperate(){};
public:
virtual GetResult * CreateResult() = 0;
};
class SimpleCreateOperate : public CreateOperate
{
public:
SimpleCreateOperate(){};
~ SimpleCreateOperate(){};
public:
GetResult * CreateResult()
{
GetResult * temp = NULL;
char qw[] = "";
cout<<"請輸入(+、-、*、/):"<<endl;
cin >>qw;
switch (*qw) {
case '+':
temp = new ResultAdd();
break;
case '-':
temp = new ResultSub();
break;
case '*':
temp = new ResultRide();
break;
case '/':
temp = new ResultDIV();
break;
default:
break;
}
return temp;
}
};
//測試
void testSimpleCreate()
{
CreateOperate * createfactory = new SimpleCreateOperate();
GetResult * productCreate = createfactory->CreateResult();
productCreate->result(20,4);
delete productCreate;
productCreate = NULL;
}
int main(int argc, const char * argv[]) {
testSimpleCreate();
return 0;
}