我必须创建一个程序并设计一组类,这些类可以一起模拟汽车的燃油表和里程表。这些是要求:

FuelGauge类:该类将模拟燃油表。其职责是:
•了解汽车当前的燃油量(加仑)。
•以加仑为单位报告汽车当前的燃油量。
•使燃油量增加1加仑。这模拟了在汽车中加油。 (汽车最多可容纳15加仑。)
•如果燃油量大于0加仑,则能够将燃油量减少1加仑。这模拟了汽车行驶时燃烧的燃油。

•里程表类:该类应模拟汽车的里程表。其职责是:
•了解汽车的当前行驶里程。
•报告汽车的当前行驶里程。
•能够将当前里程增加1英里。里程表可以存储的最大里程为999,999英里。当超出此数量时,里程表会将当前里程重置为0。
•能够使用FuelGauge对象。每行驶24英里,它应将FuelGauge对象的当前燃料量减少1加仑。 (汽车的燃油经济性为每加仑24英里。)

通过创建每个类的实例来演示这些类。模拟给汽车加满燃料,然后运行一个循环,使里程表递增,直到汽车用完燃料为止。在每次循环中,打印汽车的当前行驶里程和燃油量。

我不确定如何使用类文件和main.cpp
这就是我所拥有的,并且我不断收到错误,并且我不确定该怎么做。任何帮助是极大的赞赏。

错误:

In file included from main.cpp:17:
FuelGauge.h:13: error: ISO C++ forbids declaration of âfuelGaugeâ with no type
FuelGauge.h:18: error: ISO C++ forbids declaration of âfuelGaugeâ with no type
FuelGauge.h: In member function âvoid FuelGauge::incrementFuelTank()â:
FuelGauge.h:30: error: expected â;â before â}â token
In file included from main.cpp:18:
Odometer.h: At global scope:
Odometer.h:15: error: âfâ was not declared in this scope
Odometer.h:15: error: invalid use of incomplete type âclass Odometerâ
Odometer.h:9: error: forward declaration of âclass Odometerâ
Odometer.h:15: error: expected primary-expression before â(â token
Odometer.h:15: error: expected primary-expression before âintâ
Odometer.h:15: error: expected primary-expression before â*â token
Odometer.h:15: error: âfâ was not declared in this scope
Odometer.h:15: error: a function call cannot appear in a constant-expression
Odometer.h:15: error: ISO C++ forbids declaration of âPublicâ with no type
Odometer.h:16: error: expected â;â before â{â token
Odometer.h:21: error: expected â;â before âintâ
main.cpp: In function âint main()â:
main.cpp:25: error: no matching function for call to âOdometer::Odometer(int, FuelGauge*)â
Odometer.h:9: note: candidates are: Odometer::Odometer()
Odometer.h:9: note:                 Odometer::Odometer(const Odometer&)
Odometer.h:26: error: âvoid Odometer::incrementCurrentMileage()â is private
main.cpp:32: error: within this context
Odometer.h:21: error: âint Odometer::getCurrentAmtMiles()â is private
main.cpp:33: error: within this context




//main.cpp
#include <iostream>
#include "FuelGauge.h"
#include "Odometer.h"

using namespace std;

int main ()
{
    FuelGauge fuel;
    Odometer odm(0, &fuel);

    for (int i = 0; i < 15; i++)
    {
        fuel.incrementFuelTank();
    }
    while (fuel.getCurrentAmtFuel() > 0)
    {
        odm.incrementCurrentMileage();
        cout << "Mileage: " << odm.getCurrentAmtMiles() << endl;
        cout << "Fuel Level: " << fuel.getCurrentAmtFuel() << " gallons" << endl;
    }

    return 0;
}

//FuelGauge.h
using namespace std;

#ifndef FUELGAUGE_H
#define FUELGAUGE_H

class FuelGauge
{
    private:
        int currentAmtFuel;

    public:
        fuelGauge (int gallons)
        {
            currentAmtFuel = gallons;
        }

        fuelGauge() {}

        int getCurrentAmtFuel () const
        {
            return currentAmtFuel;
        }

        void incrementFuelTank()
        {
            if (currentAmtFuel < 15)
            {
                currentAmtFuel++
            }
        }

        void decrementFuelTank()
        {
            if (currentAmtFuel > 0)
            {
                currentAmtFuel--;
            }
        }
};

#endif

//Odometer.h
#include "FuelGauge.h"

using namespace std;

#ifndef ODOMETER_H
#define ODOMETER_H
class Odometer
{
    private:
        int currentAmtMiles;
        FuelGauge *fuelG;

    Public:
        Odometer(int miles, FuelGauge *f)
        {
            currentAmtMiles = miles;
            fuelG = f;
        }

        int getCurrentAmtMiles ()
        {
            return currentAmtMiles;
        }

        void incrementCurrentMileage()
        {
            if(currentAmtMiles < 999999)
            {
                currentAmtMiles++;
            }
            if (currentAmtMiles == 999999)
            {
                currentAmtMiles = 0;
            }
        }

        void decrementCurrentMileage()
        {
            if (currentAmtMiles > 24)
            {
                currentAmtMiles--;
            }
        }
};

#endif

最佳答案

理想情况下,应设计如下:


创建一个称为“汽车”的类。
“汽车”的两个成员变量应该分别是“ FuelGauge”和“ Odometer”类的对象。
应该有一个公共成员函数“ travel”。此函数应将里程表中的里程数增加1,并且还应将“汽车”的成员变量“距离”增加1。
在每次调用“ travel”函数时,应计算“ distance”值的变化。一旦该差异达到25,您应该将燃油值设置为“零”。


优点


FuelGauge和Odometer对象位于“汽车”类中。因此,这两个对象在“ car”实例内部绑定在一起。这会将它们模拟为同一“汽车”对象的组件。
您可以在“汽车”类中保留成员变量“距离”。因此,您能够跟踪汽车行驶了多少距离,并根据其值的变化,还可以计算出必须加注油箱几次以及必须加油几次。拍摄里程表的极限。这些是附加功能,但是从诸如“汽车”之类的实际对象的角度来看,它们具有很大的意义。


您必须自己编写代码。


您粘贴的代码表明您没有注意基本的编程规则。检查拼写错误。 FuelGauge是一类,但是您的构造函数是Fuelgauge。应该是FuelGauge。
您使用的条件太多。您无需单独检查,就可以完成。
从设计模式的角度来看,您的OdoMeter设计是错误的。里程表的工作不是根据燃油量自行重置。它应该是同时监视这两者的更高系统。这样可以实现类的可分离性,从而使设计和理解变得更加简单。
到处都是可能的许多其他优化,但没有关系,因为应该重新设计整个设计。

09-07 05:55