【发布时间】:2020-10-09 05:54:37
【问题描述】:
我有两个课程,一个是燃料课程,另一个是里程课程。每 24 英里使用 1 次燃料。对于这个作业,我需要在我的“miles”类中有一个指向“fuel”类的指针,这样我们就可以让“mile”类与“fuel”类一起工作,而不必创建整个对象“fuel”对象在“英里”类中。在我对其进行测试之前一直进展顺利,经过一些调试后,似乎由于某种原因,每当我在“英里”类中调用 get 函数时,燃料对象的值都会发生变化。但是,我所做的只是返回一个成员变量。为什么它会改变我的燃料对象?我也不会在其他任何地方更改指针的值,因此它应该始终指向燃料对象。
类规范
#ifndef ODO_H
#define ODO_H
#include "FuelGauge.h"
class Odometer
{
private:
int currentMiles = 0;
int maxMilage = 999999;
FuelGauge* fuelObject = nullptr;
int counter = 0;
public:
Odometer(int, FuelGauge);
int getMiles();
void addMiles();
};
#endif ODO_H
类实现
#include "Odometer.h"
Odometer::Odometer(int currMileage, FuelGauge Gauge) {
if (currMileage >= 0 && currMileage <= maxMilage) {
currentMiles = currMileage;
}
else {
cout << "Starting mileage is invalid" << endl;
}
fuelObject = &Gauge;
}
int Odometer::getMiles() {
return currentMiles;
}
void Odometer::addMiles() {
if (currentMiles < maxMilage) {
currentMiles++;
counter++;
}
else if (currentMiles >= maxMilage) {
cout << "You have reached the max mileage ... resetting to zero!" << endl;
currentMiles = 0;
}
if (counter >= 24) {
fuelObject->useFuel();
counter = 0;
}
}
在 main 中,当我调用 getMiles() 函数时; “fuelObject”指向的对象的值已更改为某个随机大数。为什么会这样?
【问题讨论】:
-
你能创建一个更小的对象来只操纵那个值而不是别的吗?此外,在某些(明显的)情况下,当返回的是一些大的随机 int 时,会返回对象的地址或随机内存单元。