啊哟喂我好傻 2022-04-11 14:15 采纳率: 75%
浏览 116
已结题

c++写一个计算器程序

用面向对象方法设计一个计算器控制台程序。

1.1设计一个父类Operation, 数据成员包含两个操作数m_numberA,m_numberB。 成员函数包括set(),get()函数设置操作数的值,虚函数GetResult()用于输出结果。

1.2分别设计派生类 OperationAdd,OperationSub,OperationMul, OperationDiv实现加减乘除操作,注意除法操作除数不能为0。

1.3派生类统一继承自父类Operation, 重写虚函数GetResult()输出操作后的结果。

1.4 OperationFactory类已经写好,可以直接使用。
class OperationFactory {

public:

static Operation * CreateOperate(char oper)

{

   Operation * poper = NULL;

                 switch (oper) 

                    {

                               case '+':

                          poper = new OperationAdd;

                             break;

                               case '-':

                             poper = new OperationSub;

                             break;

                               case '*':

                                      poper = new OperationMul;

                                      break;

                               case '/':

                                      poper = new OperationDiv;

                                      break;

                     }

        return poper;

   }

};

int main()

{

   int flag = 1;

   while (flag)

   {

          cout << "input A:";

          double numA;

          cin >> numA;

          cout << "input operator:";

          char oper;

          cin >> oper;

          cout << "input B:";

          double numB;

          cin >> numB;

          Operation* poper = OperationFactory::CreateOperate(oper);

          poper->SetNumA(numA);

          poper->SetNumB(numB);

          cout << poper->GetNumA() << ' ' << oper << ' ' << poper->GetNumB() << " = " << poper->GetResult() << endl;

          cout << "是否需要继续: (0/1)";

          cin >> flag;

   }

   return 0;

}

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-04-11 14:37
    关注
    class Operation
    {
        double m_numberA,m_numberB;
    public:
        double GetNumA() {return m_numberA;}
        double GetNumB() {return m_numberB;}
        void SetNumA(double A) {m_numberA = A;}
        void SetNumB(double B) {m_numberB = B;}
        virtual double GetResult() {return 0;}
    };
    
    class OperationAdd : public Operation
    {
    public:
        virtual double GetResult() {return GetNumA() + GetNumB();}
    };
    
    class OperationSub : public Operation
    {
    public:
        virtual double GetResult() {return GetNumA() - GetNumB();}
    };
    
    class OperationMul : public Operation
    {
    public:
        virtual double GetResult() {return GetNumA() * GetNumB();}
    };
    
    class OperationDiv : public Operation
    {
    public:
        virtual double GetResult() { if(GetNumB() == 0) return 0; return GetNumA() / GetNumB();}
    };
    
    
    class OperationFactory {
    public:
    
    static Operation * CreateOperate(char oper)
    
    {
    
       Operation * poper = NULL;
     
                     switch (oper) 
     
                        {
     
                                   case '+':
     
                              poper = new OperationAdd;
     
                                 break;
     
                                   case '-':
     
                                 poper = new OperationSub;
     
                                 break;
     
                                   case '*':
     
                                          poper = new OperationMul;
     
                                          break;
     
                                   case '/':
     
                                          poper = new OperationDiv;
     
                                          break;
     
                         }
     
            return poper;
     
       }
    };
    
    int main()
    
    {
       int flag = 1;
     
       while (flag)
     
       {
     
              cout << "input A:";
     
              double numA;
     
              cin >> numA;
     
              cout << "input operator:";
     
              char oper;
     
              cin >> oper;
     
              cout << "input B:";
     
              double numB;
     
              cin >> numB;
     
              Operation* poper = OperationFactory::CreateOperate(oper);
     
              poper->SetNumA(numA);
     
              poper->SetNumB(numB);
     
              cout << poper->GetNumA() << ' ' << oper << ' ' << poper->GetNumB() << " = " << poper->GetResult() << endl;
     
              cout << "是否需要继续: (0/1)";
     
              cin >> flag;
     
       }
     
       return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
  • 有问必答小助手 2022-04-11 15:40
    关注
    您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
    PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月19日
  • 已采纳回答 4月11日
  • 创建了问题 4月11日

悬赏问题

  • ¥15 电脑锁屏时vba运行SAP,excel数据不能复制到SAP
  • ¥50 74LS系列 74LS00 74LS04设计一个RS485电路(关键词-差分)
  • ¥30 各位help写一下代码
  • ¥15 在运行SDEdit模型下载不了
  • ¥15 求51控制l298n驱动的小车中超声波避障怎么写
  • ¥15 电脑连上WIFI却用不了
  • ¥30 MATLAB在RLC电路的固有响应和阶跃响应GUI仿真报告
  • ¥15 hyper-v出现的问题
  • ¥15 有能用的可加酬金,求可以批量下载懒人听书的软件,能登录自己帐号的。
  • ¥100 高博一起做RGB-D SLAM(5)VO无法出visualisation问题