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

时间:2015-07-19 19:48:58

标签: c++ function class initialization

方案

我正在学习C ++,所以请原谅我的天真。我试图构建自己的类,对象和方法 - 每个类似乎都按预期工作。但是我遇到的问题似乎是未初始化的存储(可能还有本地对象的使用?)但是我想知道如何修复它,如果确实是它的意思,或者替代。我目前的思路是,物体需要通过......但是可能会有所不同......

代码

//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

实际输出

debug win32 - 52428,50,100

发布win32 - 0,50,100

2 个答案:

答案 0 :(得分:1)

StartingPrices函数中,您之前调用的Mercedes对象GetMin就是创建的对象,即与您在{{1}中创建的对象不同的对象功能。
这意味着该对象尚未将main设置为任何内容,因此该值将为垃圾(即,您实际上无法控制的值),在这种情况下{{1}在调试和itsMinPrice发布中。

我认为您希望将52428对象的引用从0函数传递到Mercedes函数:

main

在类的StartingPrices中设置成员的默认值也是个好主意。

答案 1 :(得分:1)

在您的Car课程中,除非您致电itsMinPrice,否则您不会初始化您的成员变量SetMin,这意味着如果您忘记致电{{},则可能会使用未初始化的Car实例1}}就可以了。通常,在具有某些值的类的构造函数中进行初始化是很好的,例如

SetMin

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

Car() : itsMinPrice(0) {
}