zoukankan      html  css  js  c++  java
  • c++实现简单工厂模式

    #ifndef ARITHOPERATOR_H
    #define ARITHOPERATOR_H

    #define EPS 0.000000000001

    class ArithOpe
    {
    public:
        virtual double GetArithOpeResult()const
        {
            return 0.0;
        }

        double GetArithOpeNum1()const
        {
            return this->m_num1;
        }
        double GetArithOpeNum2()const
        {
            return this->m_num2;
        }

        void SetArithOpeNum1(const double& num1)
        {
            this->m_num1=num1;
        }
        void SetArithOpeNum2(const double& num2)
        {
            this->m_num2=num2;
        }

    private:
        double m_num1;
        double m_num2;
    };

    class ArithOpeAdd:public ArithOpe
    {
        double GetArithOpeResult()const
        {
            return this->GetArithOpeNum1()+this->GetArithOpeNum2();
        }
    };

    class ArithOpeSub:public ArithOpe
    {
        double GetArithOpeResult()const
        {
            return this->GetArithOpeNum1()-this->GetArithOpeNum2();
        }
    };

    class ArithOpeMul:public ArithOpe
    {
        double GetArithOpeResult()const
        {
            return this->GetArithOpeNum1()*this->GetArithOpeNum2();
        }
    };

    class ArithOpeDiv:public ArithOpe
    {
        double GetArithOpeResult()const
        {
            double tmp=this->GetArithOpeNum2()-(int)(this->GetArithOpeNum2());
            if(tmp>=-EPS&&tmp<=EPS)
                return 0.0;
            return this->GetArithOpeNum1()/this->GetArithOpeNum2();
        }
    };

    class ArithOpeMod:public ArithOpe
    {
        double GetArithOpeResult()const
        {
            double tmp=this->GetArithOpeNum2()-(int)(this->GetArithOpeNum2());
            if(tmp>=-EPS&&tmp<=EPS)
                return 0.0;
            return (int)(this->GetArithOpeNum1())%(int)(this->GetArithOpeNum2());
        }
    };

    #endif // ARITHOPERATOR_H

    //simply Facotory
    #ifndef FACTORY_H
    #define FACTORY_H
    #include "arithoperator.h"

    class ArithOperatorFactory
    {
    public:
        ArithOpe* CreateArithOperator(const char chsrc)
        {
            ArithOpe* pObject;

            switch(chsrc)
            {
            case '+':
                pObject = new ArithOpeAdd;
                break;
            case '-':
                pObject = new ArithOpeSub;
                break;
            case '*':
                pObject = new ArithOpeMul;
                break;
            case '/':
                pObject = new ArithOpeDiv;
                break;
            case '%':
                pObject = new ArithOpeMod;
                break;

            }

            return pObject;
        }
    };

    #endif // FACTORY_H


    #include <stdio.h>
    #include "factory.h"


    int main(int argc, char *argv[])
    {
        ArithOperatorFactory Factory;

        ArithOpe *pObj=Factory.CreateArithOperator('/');
        pObj->SetArithOpeNum1(1.1);
        pObj->SetArithOpeNum2(0);

        printf("%0.2f\n", pObj->GetArithOpeResult());
        return 0;
    }

  • 相关阅读:
    小白如何在Windows下使用Redis
    OAuth2.0实例说明
    关于EntityFramework 更新数据记录时字段全部更新问题和不从数据库中获取直接更新记录
    Asp.net Controller中View 和Action方法认证Authorize 及对AuthorizeAttribute扩展
    MidpointRounding 枚举值简要说明
    JavaScript 去空格方法(转部份)
    脏读,不可重复读,幻读 (转)
    20111204 15:36 JAVA实现位向量给无重复元素的整数数组排序
    JAVA String
    CSS样式表的优先级别
  • 原文地址:https://www.cnblogs.com/ccmfc/p/1924704.html
Copyright © 2011-2022 走看看