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;
    }

  • 相关阅读:
    【小贴士】zepto find元素以及ios弹出键盘可能让你很头疼
    【iScroll源码学习04】分离IScroll核心
    【iScroll源码学习03】iScroll事件机制与滚动条的实现
    展望14,献给困惑的初级前端,理想不甘消磨,目标不能停滞!
    【iScroll源码学习02】分解iScroll三个核心事件点
    原生andriod浏览器回退后dom(click)事件全体失效问题探究
    【iScroll源码学习01】准备阶段
    【iScroll源码学习00】模拟iScroll
    【再探backbone 03】博客园单页应用实例(提供源码)
    【再探backbone 02】集合-Collection
  • 原文地址:https://www.cnblogs.com/ccmfc/p/1924704.html
Copyright © 2011-2022 走看看