Question:
Write a class called fueler that can keep track of the fuel and mileage of a vehicle. Include private member variables to track the amount of fuel that the vehicle has consumed and the distance that the vehicle has traveled. You may choose whatever units you like (for example, fuel could be measured in U.S. gallons or Imperial gallons or liters), but be sure to document your choices at the points where you declare the variables.
The class should have a constructor that initialize these variables to zero. Include a member function that can later reset both variables to zero. There are two different modification member functions to add a given amount to the total distance driven (one has a miles parameter, and the other has a kilometers parameter); similarly, there are three member functions to a given amount to the total fuel consumed (with different units for the amount of fuel).
The class has two const member functions to retrieve the total distance driven (in miles or km), three functions for the fuel consumed (in U.S. gallons, Imperial gallons, or liters) and four for the fuel mileage (in U.S. mpg, Imperial mpg, km per liters, or liters per 100 km).
My answer:
fueler.h
#pragma once
class fueler{
public:
fueler(){
fuel = distance = 0;
};
void reset_fueler();
void add_miles(double miles);
void add_kilometers(double kilometers);
void add_us_gallons(double usgallons);
void add_im_gallons(double imgallons);
void add_liters(double liters);
void fueler_info();
private:
double get_miles() const;
double get_km() const;
double get_usgallons() const;
double get_imgallons() const;
double get_liters() const;
double get_usmpg() const;
double get_immpg() const;
double get_km_per_liters() const;
double get_liters_per_100km() const;
// 1 U.S. gallon = 3.785 liters
// 1 Imperial gallon = 4.546 liters
double fuel;// liters
// 1 mile = 1.609 km
double distance;// kilometers
};
fueler.cpp
#include "fueler.h"
#include <iostream>
#include <cassert>
using namespace std;
void fueler::reset_fueler(){
fuel = distance = 0;
}
void fueler::add_miles(double miles){
assert(miles >= 0);
distance += miles * 1.609;
}
void fueler::add_kilometers(double kilometers){
assert(kilometers >= 0);
distance += kilometers;
}
void fueler::add_us_gallons(double usgallons){
assert(usgallons >= 0);
fuel += usgallons * 3.785;
}
void fueler::add_im_gallons(double imgallons){
assert(imgallons >= 0);
fuel += imgallons * 4.546;
}
void fueler::add_liters(double liters){
assert(liters >= 0);
fuel += liters;
}
void fueler::fueler_info(){
cout << "Fueler Status: " << endl;
cout << "distance = " << get_km() << " kilometers = " << get_miles()
<< " miles." << endl;
cout << "fuel = " << get_liters() << " liters = " << get_usgallons()
<< " U.S. gallons = " << get_imgallons() << " Imperial gallons." << endl;
cout << "fuel mileage = " << get_usmpg() << " U.S. mpg = " << get_immpg()
<< " U.S. mpg = " << get_km_per_liters() << " km per liters." << endl;
cout << "fuel mileage = " << get_liters_per_100km() << " liters per 100 km." << endl;
}
double fueler::get_miles() const{
return distance / 1.609;
}
double fueler::get_km() const{
return distance;
}
double fueler::get_usgallons() const{
return fuel / 3.785;
}
double fueler::get_imgallons() const{
return fuel / 4.546;
}
double fueler::get_liters() const{
return fuel;
}
double fueler::get_usmpg() const{
return (distance / 1.609) / (fuel / 3.785);
}
double fueler::get_immpg() const{
return (distance / 1.609) / (fuel / 4.546);
}
double fueler::get_km_per_liters() const{
return distance / fuel;
}
double fueler::get_liters_per_100km() const{
if(get_km_per_liters() == 0) return 0;
return 100 / get_km_per_liters();
}
main.cpp
#include "fueler.h"
#include <iostream>
using namespace std;
int main(){
fueler a;
a.add_im_gallons(100);
a.add_kilometers(3214);
a.add_liters(49);
a.add_miles(3269);
a.add_us_gallons(120);
a.fueler_info();
cout << "****** Now reset ******" << endl;
a.add_im_gallons(60);
a.add_kilometers(1200);
a.add_liters(100);
a.add_miles(4210);
a.add_us_gallons(33);
a.fueler_info();
}
结果:
Fueler Status:
distance = 8473.82 kilometers = 5266.51 miles.
fuel = 957.8 liters = 253.052 U.S. gallons = 210.691 Imperial gallons.
fuel mileage = 20.812 U.S. mpg = 24.9964 U.S. mpg = 8.84717 km per liters.
fuel mileage = 11.303 liters per 100 km.
****** Now reset ******
Fueler Status:
distance = 16447.7 kilometers = 10222.3 miles.
fuel = 1455.46 liters = 384.535 U.S. gallons = 320.164 Imperial gallons.
fuel mileage = 26.5836 U.S. mpg = 31.9284 U.S. mpg = 11.3007 km per liters.
fuel mileage = 8.84904 liters per 100 km.
Reference:
整理自 Data Structures and Other Objects Using C++ ( Fourth Edition ) Michael Main, Walter Savitch. p125