如何从 C++ 中的函数更改对象的值?

How to change value of an object from a function in c++?

场景

我正在学习C++,请原谅我的幼稚。我已经尝试构建自己的 class、对象和方法 - 每一个似乎都按预期工作。然而,我 运行 遇到了似乎 未初始化存储 的问题(可能还有本地对象的使用?)但是我想知道如何解决它,如果确实如此它注定是,或者是替代品。我目前的思路是需要传递该对象...但是这可能还有很长的路要走...

代码

//header
class Car{
public:
    USHORT GetMin();                            
    void SetMin(USHORT min);    
private:
    USHORT itsMinPrice;                                                                     
};

USHORT Car::GetMin(){
    return itsMinPrice;
}

void Car::SetMin(USHORT min){
    itsMinPrice = min;
}

-

void StartingPrices(){
    Car Mercedes;
    std::cout << Mercedes.GetMin() << "\n";
    Mercedes.SetMin(50);

    std::cout << Mercedes.GetMin()<< "\n";

}

int main(){
    float input;
    Car Mercedes;
    Mercedes.SetMin(100);
    StartingPrices();

    std::cout << Mercedes.GetMin() << "\n";

    std::cin >> input;
    return 0;
}

预期输出

100, 50, 50

实际产量

调试 win32 - 52428、50、100

发布 win32 - 0、50、100

在您的 StartingPrices 函数中,您调用 GetMinMercedes 对象是在之前的行中创建的,即与您在 main函数。
这意味着该对象尚未将 itsMinPrice 设置为任何值,因此该值将是垃圾(也就是说,您实际上无法控制的值),在本例中为 52428调试和发布中的 0

我想你想做的是将 Mercedes 对象的引用从 main 函数传递到 StartingPrices 函数:

void StartingPrices(Car& mercedes){
   std::cout << Mercedes.GetMin() << "\n"; // Here the GetMin method will return 100.
   ...
}

int main(){
    ....
    Car Mercedes;
    Mercedes.SetMin(100);
    StartingPrices(Mercedes);
    ....
}

在 class 的 constructor 中设置成员的默认值也是一个好主意。

在您的 Car class 中,除非您调用 SetMin,否则您不会初始化您的成员变量 itsMinPrice,这意味着您可能会使用未初始化的 Car 实例,如果你忘了给它打电话 SetMin 。通常最好在 class 的构造函数中使用一些值进行初始化,例如

Car() : itsMinPrice(0) {
}

或者创建一个带有初始值的构造函数

Car(USHORT minValue) : itsMinPrice(minValue) {
}