我是 C++ 的新手,因此对于标题中的错误和可能混淆的术语深表歉意。很想知道这叫什么。
我正在尝试将具有重载构造函数的对象添加到另一个对象。但是,它总是采用默认构造函数而不是我重载的构造函数。
考虑以下场景。我有一个带有可选水位传感器的水泵。我的水位传感器有一个单独的类。
class WaterLevelSensor{
private:
bool _waterLevelOK;
bool _reversedLogic;
public:
WaterLevelSensor();
WaterLevelSensor(bool reversedLogic);
};
WaterLevelSensor::WaterLevelSensor(){
_reversedLogic = true;
}
WaterLevelSensor::WaterLevelSensor(bool reversedLogic){
_reversedLogic = reversedLogic;
}
和一个泵类
class Pump{
private:
bool _hasWaterSensor = false;
WaterLevelSensor waterSensor;
public:
Pump();
void addWaterSensor(reversedLogic);
};
Pump::Pump(){}
void Pump::addWaterSensor(reversedLogic){
WaterLevelSensor waterSensor(reversedLogic);
_hasWaterSensor = true;
}
如果我执行以下操作,即使我通过了 false,水传感器仍将具有 reversedLogic == true。我假设这是因为在泵的创建过程中,传感器的默认构造函数已经被调用,传递了 reversedLogic = true。我将如何解决这个问题?我确实意识到我可以通过创建一个像 setLogic() 这样允许改变变量的函数来修复它。但我很好奇,如果不创建它,正确的解决方案是什么。
int main(){
Pump pump;
pump.addWaterSensor(false);
return 0;
}
最佳答案
在 addWaterSenor 中,您的对象是在本地范围内声明和创建的,并且在函数返回后将立即不复存在。将新的 WaterSensor 分配给已经作为类成员存在的 waterSensor,而无需声明新的本地 waterSensor。
waterSensor = WaterLevelSensor(reversedLogic);
关于C++将具有重载构造函数的对象添加到另一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59219904/