簡單工廠類實現簡單四則運算

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;

}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章