如何从 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
函数中,您调用 GetMin
的 Mercedes
对象是在之前的行中创建的,即与您在 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) {
}
场景
我正在学习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
函数中,您调用 GetMin
的 Mercedes
对象是在之前的行中创建的,即与您在 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) {
}