C++将具有重载构造函数的对象添加到另一个对象

标签 c++ class object constructor

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

相关文章:

java - 自动管理Java对象

python - 在 Python 中从 csv 文件中生成对象

c++ - pthread_create 缓冲区大小。不够?

c++ - 通过手动安装库来修复gcc undefined include <>

c++ - 如何在具有多种参数类型的模板类中仅专门化一种方法

c++ - 用共享指针实现复制 Controller ?

C#:如何将嵌套结构从 C 转换为 C#?

c++ - 为什么在使用临时对象访问时引用类型是左值?

c++ - 内存和性能之间的权衡

PHP类,使用 'var'声明变量时解析语法错误