大话设计模式笔记——工厂模式(C++计算器实现)

调试bug:基类里面的函数必须要定义或者定义为纯虚函数,否则会报链接错误。


工厂模式简单一点,就是调用一个函数,可以根据传入形参的不同可以生成不同的结果。

工厂模式基于多态,子类重写父类的虚函数(这个虚函数是做具体工作的函数),工厂制造的对象都隐式转换成基类对象,调用被重写的虚函数执行操作。


//
//  main.cpp
//  Factory
//
//  Created by Ben_22 on 14-5-28.
//  Copyright (c) 2014年 Ben_22. All rights reserved.
//

#include <iostream>
#include "string"
using namespace::std;


class Operation{
public:
    double _numberA = 0;
    double _numberB = 0;
public:
    virtual double getResult()=0;
};


class OperationAdd : public Operation{
public:
    double getResult() override{
        return _numberA+_numberB;
    }
};

class OperationSub : public Operation{
public:
    double getResult() override{
        return _numberA-_numberB;
    }
};

class OperationMul : public Operation{
public:
    double getResult() override{
        return _numberA*_numberB;
    }
};

class OperationDiv : public Operation{
public:
    double getResult() override{
        if (_numberB==0) {
            printf("异常\n");
            return 0;
        }
        return _numberA/_numberB;
    }
};

class OperationFactory{
public:
    static Operation* createOpr(char operate){
        Operation *oper = nullptr;
        switch (operate) {
            case '+':
                oper = new OperationAdd();
                break;
            case '-':
                oper = new OperationSub;
                break;
            case '*':
                oper = new OperationMul;
                break;
            case '\\':
                oper = new OperationDiv;
                break;
            default:
                break;
        }
        return oper;
    };
};

int main(int argc, const char * argv[])
{
    cout<<"输入第一个数字:"<<endl;
    double num1,num2;
    cin>>num1;
    cout<<"输入第一个数字:"<<endl;
    cin>>num2;
    cout<<"输入操作运算符(+ - * \\):"<<endl;
    char opr;
    cin>>opr;
    Operation *temp = OperationFactory::createOpr(opr);
    temp->_numberA = num1;
    temp->_numberB = num2;
    cout<<temp->getResult()<<endl;
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值