我必须创建一个程序并设计一组类,这些类可以一起模拟汽车的燃油表和里程表。这些是要求:
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设计是错误的。里程表的工作不是根据燃油量自行重置。它应该是同时监视这两者的更高系统。这样可以实现类的可分离性,从而使设计和理解变得更加简单。
到处都是可能的许多其他优化,但没有关系,因为应该重新设计整个设计。