Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用C+更新总值+;面向对象设计_C++_Oop - Fatal编程技术网

C++ 使用C+更新总值+;面向对象设计

C++ 使用C+更新总值+;面向对象设计,c++,oop,C++,Oop,我的任务是计算直升机所需的燃油量。直升机可以执行四种操作: 持有 提高 降落 直的 用户通过输入参数选择直升机的动作。用户可以根据需要选择任意多个操作。最后,根据用户的参数和操作选择计算总燃油量。我需要用面向对象的方法创建这个系统 以下是我迄今为止所做的工作: #include <iostream> #include <stdio.h> using namespace std; class FlyingMode { protected: float t

我的任务是计算直升机所需的燃油量。直升机可以执行四种操作:

  • 持有
  • 提高
  • 降落
  • 直的
用户通过输入参数选择直升机的动作。用户可以根据需要选择任意多个操作。最后,根据用户的参数和操作选择计算总燃油量。我需要用面向对象的方法创建这个系统

以下是我迄今为止所做的工作:

#include <iostream>
#include <stdio.h>
using namespace std;

class FlyingMode {
   protected:
    float time, fuel_rate, start, end, pace, distance;
    float total;
   public:
      FlyingMode(float a=0, float b=0, float c=0,
              float d=0, float e=0, float f=0){
         time = a;
         fuel_rate = b;
         start = c;
         end = d;
         pace = e;
         distance = f;
         total = 0;
      }
      virtual int calcFuel(){
         return 0;
      }
};
class Holding: public FlyingMode{
   public:
      Holding(float a=0, float b=0, float c=0,
              float d=0, float e=0, float f=0):FlyingMode(a, b, c, d, e, f) { }

      int calcFuel(){
         total = (time * fuel_rate * 60);
         return total;
      }
};
class Raising: public FlyingMode{
   public:
      Raising(float a=0, float b=0, float c=0,
                  float d=0, float e=0, float f=0):FlyingMode(a, b, c, d, e, f) { }
      int calcFuel (){
          if(start < end && pace != 0 ){
              total = (end - start)/pace * fuel_rate;
              return (end - start)/pace * fuel_rate;
          }else{
              return 0;
          }
      }
};
class Landing: public FlyingMode{
   public:
      Landing(float a=0, float b=0, float c=0,
                  float d=0, float e=0, float f=0):FlyingMode(a, b, c, d, e, f) { }
      int calcFuel (){
          if(start > end && pace != 0 ){
              total = (start - end)/pace * fuel_rate;
              return (start - end)/pace * fuel_rate;
          }else{
              return 0;
          }
      }
};
class Straight: public FlyingMode{
   public:
      Straight(float a=0, float b=0, float c=0,
                  float d=0, float e=0, float f=0):FlyingMode(a, b, c, d, e, f) { }
      int calcFuel (){
          if(distance != 0 || pace != 0 ){
              total = distance/pace * fuel_rate;
              return distance/pace * fuel_rate;
          }else{
              return 0;
          }
      }
};
// Main function for the program
int main( ){

    float a=0, b=0;
    float c=0, d=0, e=0, f=0;
    float total = 0;
    char op;

    Holding hold;
    Raising raise;
    Landing land;
    Straight straight;

    while(op != 'x') {

        cout << "Enter the move : " << endl;
        cout << "1 ---> Holding Flight" << endl;
        cout << "2 ---> Raising" << endl;
        cout << "3 ---> Landing " << endl;
        cout << "4 ---> Straight Flight " << endl;
        cout << "5 ---> Calculate fuel" << endl;
        cout << "x ---> Exit " << endl;

        op = std::getchar();

        if(op == '1') {
            cout << "Enter time : ";
            cin >> a;
            cout << "Enter fuel rate: ";
            cin >> b;
        }
        if(op == '2') {
            cout << "Enter starting altitude: ";
            cin >> c;
            cout << "Enter ending altitude: ";
            cin >> d;
            cout << "Enter raising pace: ";
            cin >> e;
            cout << "Enter fuel rate: ";
            cin >> f;
        }
        if(op == '3') {
            cout << "Enter starting altitude:  ";
            cin >> c;
            cout << "Enter ending altitude:  ";
            cin >> d;
            cout << "Enter landing pace:  ";
            cin >> e;
            cout << "Enter fuel rate:  ";
            cin >> b;
        }
        if(op == '4') {
            cout << "Enter ending altitude: ";
            cin >> d;
            cout << "Enter starting altitude: ";
            cin >> c;
            cout << "Enter fuel rate: ";
            cin >> b;
        }
        if(op == '5') {
            FlyingMode *mode;

            hold = Holding(a, b, 0, 0, 0, 0);
            raise = Raising(0, f, c, d, e, 0);
            land = Landing(0, b, d, c, e, 0);
            straight = Straight(0, b, c, d, 0, 0);

            //store holding address

            //call holding fuel
            mode = &hold;
            float hold_result = mode -> calcFuel();
            //call raising fuel
            mode = &raise;
            float raise_result = mode -> calcFuel();
            //call landing fuel
            mode = &land;
            float land_result = mode -> calcFuel();
            //call straight fuel
            mode = &straight;
            float str_result = mode -> calcFuel();
            //calculate total

            /*cout << "hold_result" << hold_result;
            cout << "raise_result" << raise_result;
            cout << "land_result" << land_result;
            cout << "str_result" << str_result;*/
            total = hold_result + raise_result + land_result + str_result;
            cout <<"Total required fuel : "<< total << " kg/second "<< endl;

        }
        if(op == 'x') {
            cout << "System will exit..." << endl;
            return 0;
        }
        else {
            //if(op==(1|2|3|4|5)){}
            //else cout << "Wrong selection." << endl;
            }
    }
    return 0;

}
#包括
#包括
使用名称空间std;
类飞行模式{
受保护的:
浮动时间、燃油率、开始、结束、速度、距离;
浮动总额;
公众:
飞行模式(浮动a=0,浮动b=0,浮动c=0,
浮动d=0,浮动e=0,浮动f=0){
时间=a;
燃油率=b;
开始=c;
end=d;
配速=e;
距离=f;
总数=0;
}
虚拟整数calcFuel(){
返回0;
}
};
上课时间:公共飞行模式{
公众:
保持(浮动a=0,浮动b=0,浮动c=0,
浮动d=0,浮动e=0,浮动f=0):浮动模式(a,b,c,d,e,f){
int calcFuel(){
总计=(时间*燃油率*60);
返回总数;
}
};
升班:公共飞行模式{
公众:
上升(浮动a=0,浮动b=0,浮动c=0,
浮动d=0,浮动e=0,浮动f=0):浮动模式(a,b,c,d,e,f){
int calcFuel(){
如果(开始<结束和速度!=0){
总计=(结束-开始)/速度*燃油率;
返回(结束-开始)/速度*燃油率;
}否则{
返回0;
}
}
};
类着陆:公共飞行模式{
公众:
着陆(浮动a=0,浮动b=0,浮动c=0,
浮动d=0,浮动e=0,浮动f=0):浮动模式(a,b,c,d,e,f){
int calcFuel(){
如果(开始>结束和速度!=0){
总计=(开始-结束)/速度*燃油率;
返回(开始-结束)/速度*燃油率;
}否则{
返回0;
}
}
};
普通舱:公共飞行模式{
公众:
直线(浮动a=0,浮动b=0,浮动c=0,
浮动d=0,浮动e=0,浮动f=0):浮动模式(a,b,c,d,e,f){
int calcFuel(){
如果(距离!=0 | |速度!=0){
总计=距离/速度*燃油率;
返回距离/速度*燃油率;
}否则{
返回0;
}
}
};
//程序的主要功能
int main(){
浮点数a=0,b=0;
浮点数c=0,d=0,e=0,f=0;
浮动总数=0;
char op;
持有;
提高;
登陆地;
笔直;
而(op!=“x”){
cout d;
cout>e;
cout>b;
}
如果(op='4'){
cout>d;
cout>c;
cout>b;
}
如果(op='5'){
飞行模式*模式;
保持=保持(a,b,0,0,0,0);
上升=上升(0,f,c,d,e,0);
着陆=着陆(0,b,d,c,e,0);
直线=直线(0,b,c,d,0,0);
//商店持有地址
//呼叫保持燃料
模式=&hold;
浮动保持结果=模式->计算燃料();
//呼叫提升燃料
模式=&raise;
浮动上升_结果=模式->计算燃料();
//呼叫着陆燃料
模式=&land;
浮动着陆结果=模式->计算燃料();
//直接燃油
模式=&笔直;
float str_result=mode->calcFuel();
//计算总数

/*cout首先,尽可能使用switch,而不是which,这样会使代码更快,不要重复自己的操作。我看到重复的指令


这里的快速修复方法是,我建议您将所有变量移动到while循环中,这样它们就不会被覆盖;或者,如果这是您的意图,那么可以使用更多的额外变量,这样它们将被唯一地分配给每个cin语句。但是,您仍然应该改进代码设计。

您只在op为5时计算燃料。所以仅计算最后一个操作。每次用户输入操作时,您必须计算总计。 我已经修改了代码。检查它是否有效,并将其标记为答案,以便可以关闭该问题

#include <iostream>
#include <stdio.h>
using namespace std;

class FlyingMode {
   protected:
    float time, fuel_rate, start, end, pace, distance;
    float total;
   public:
      FlyingMode(float a=0, float b=0, float c=0,
              float d=0, float e=0, float f=0){
         time = a;
         fuel_rate = b;
         start = c;
         end = d;
         pace = e;
         distance = f;
         total = 0;
      }
      virtual int calcFuel(){
         return 0;
      }
};
class Holding: public FlyingMode{
   public:
      Holding(float a=0, float b=0, float c=0,
              float d=0, float e=0, float f=0):FlyingMode(a, b, c, d, e, f) {                                  }
int calcFuel(){
         total = (time * fuel_rate * 60);
     return total;
  }
};
class Raising: public FlyingMode{
   public:
      Raising(float a=0, float b=0, float c=0,
                  float d=0, float e=0, float f=0):FlyingMode(a, b, c, d, e, f) { }
      int calcFuel (){
          if(start < end && pace != 0 ){
              total = (end - start)/pace * fuel_rate;
          return (end - start)/pace * fuel_rate;
      }else{
          return 0;
      }
  }
};
class Landing: public FlyingMode{
   public:
      Landing(float a=0, float b=0, float c=0,
                  float d=0, float e=0, float f=0):FlyingMode(a, b, c, d, e, f) { }
      int calcFuel (){
          if(start > end && pace != 0 ){
              total = (start - end)/pace * fuel_rate;
              return (start - end)/pace * fuel_rate;
          }else{
              return 0;
          }
      }
};
class Straight: public FlyingMode{
   public:
  Straight(float a=0, float b=0, float c=0,
              float d=0, float e=0, float f=0):FlyingMode(a, b, c, d, e, f) { }
  int calcFuel (){
      if(distance != 0 || pace != 0 ){
          total = distance/pace * fuel_rate;
          return distance/pace * fuel_rate;
      }else{
          return 0;
      }
  }
};
// Main function for the program
int main( ){

float a=0, b=0;
float c=0, d=0, e=0, f=0;
float total = 0;
char op;

Holding hold;
Raising raise;
Landing land;
Straight straight;

while(op != 'x') {

    cout << "Enter the move : " << endl;
    cout << "1 ---> Holding Flight" << endl;
    cout << "2 ---> Raising" << endl;
    cout << "3 ---> Landing " << endl;
    cout << "4 ---> Straight Flight " << endl;
    cout << "5 ---> Calculate fuel" << endl;
    cout << "x ---> Exit " << endl;

    cin>>op;
    cout<<"op="<<op<<endl;
    if(op == '1') {
        cout << "Enter time : ";
        cin >> a;
        cout << "Enter fuel rate: ";
        cin >> b;
    }
    else if(op == '2') {
        cout << "Enter starting altitude: ";
        cin >> c;
        cout << "Enter ending altitude: ";
        cin >> d;
        cout << "Enter raising pace: ";
        cin >> e;
        cout << "Enter fuel rate: ";
        cin >> f;
    }
    else if(op == '3') {
        cout << "Enter starting altitude:  ";
        cin >> c;
        cout << "Enter ending altitude:  ";
        cin >> d;
        cout << "Enter landing pace:  ";
        cin >> e;
        cout << "Enter fuel rate:  ";
        cin >> b;
    }
    else if(op == '4') {
        cout << "Enter ending altitude: ";
        cin >> d;
        cout << "Enter starting altitude: ";
        cin >> c;
        cout << "Enter fuel rate: ";
        cin >> b;
    }
    else if(op == '5') {

        cout <<"Total required fuel : "<< total << " kg/second "<< endl;

    }
    else if(op == 'x') {
        cout << "System will exit..." << endl;
        return 0;
    }
    else {
        //if(op==(1|2|3|4|5)){}
        //else cout << "Wrong selection." << endl;
      continue;
        }
        FlyingMode *mode;

        hold = Holding(a, b, 0, 0, 0, 0);
        raise = Raising(0, f, c, d, e, 0);
        land = Landing(0, b, d, c, e, 0);
        straight = Straight(0, b, c, d, 0, 0);

        //store holding address

        //call holding fuel
        mode = &hold;
        float hold_result = mode -> calcFuel();
        //call raising fuel
        mode = &raise;
        float raise_result = mode -> calcFuel();
        //call landing fuel
        mode = &land;
        float land_result = mode -> calcFuel();
        //call straight fuel
        mode = &straight;
        float str_result = mode -> calcFuel();
        //calculate total

        /*cout << "hold_result" << hold_result;
        cout << "raise_result" << raise_result;
        cout << "land_result" << land_result;
        cout << "str_result" << str_result;*/
        total = total+hold_result + raise_result + land_result + str_result;
        cout <<"Total required fuel : "<< total << " kg/second "<< endl;

}
return 0;

}
#包括
#包括
使用名称空间std;
类飞行模式{
受保护的:
浮动时间、燃油率、开始、结束、速度、距离;
浮动总额;
公众:
飞行模式(浮动a=0,浮动b=0,浮动c=0,
浮动d=0,浮动e=0,浮动f=0){
时间=a;
燃油率=b;
开始=c;
end=d;
配速=e;
距离=f;
总数=0;
}
虚拟整数calcFuel(){
返回0;
}
};
上课时间:公共飞行模式{
公众:
保持(浮动a=0,浮动b=0,浮动c=0,
浮动d=0,浮动e=0,浮动f=0):浮动模式(a,b,c,d,e,f){
int calcFuel(){
总计=(时间*燃油率*60);
返回总数;
}
};
升班:公共飞行模式{
公众:
上升(浮动a=0,浮动b=0,浮动c=0,
浮动d=0,浮动e=0,浮动f=0):浮动模式(a,b,c,d,e,f){
int calcFuel(){
如果(开始<结束和速度!=0){
总计=(结束-开始)/速度*燃油率;
返回(结束-开始)/速度*燃油率;
}否则{
返回0;
}
}
};
类着陆:公共飞行模式{
公众:
着陆(浮动a=0,浮动b=0,浮动c=0,
浮动d=0,浮动e=0,浮动f=0):浮动模式(a,b,c,d,e,f){
int calcFuel(){
如果(开始>结束和速度!=0){
总计=(开始-结束)/速度*燃油率;
返回(开始-结束)/速度*燃油率;
}否则{
返回0;
}
}
};
全班:酒吧