对于一个学校项目,我必须在C++中实现一个传感器类,它有一个私有属性active(boolean),它指示传感器是否处于活动状态。 我必须以这样的方式重载++运算符,如果使用operator ++,属性active将被设置为true。C++过载运算符++
我实现下述(sensor.cpp):
Sensor::Sensor(int id, std::string vendor) : _id(id), _vendor(vendor) {
std::cout << "Sensor created with id: " << Sensor::getId() << std::endl;
_status = false;
}
bool Sensor::getStatus() {
return _status;
}
void Sensor::setStatus(bool status) {
_status = status;
}
Sensor& Sensor::operator++() {
Sensor result = *this;
this->setStatus(true);
return result;
}
main.cpp中:
int main(int argc, char *argv[]) {
Sensor * sensor = new Sensor(1, "sample vendor");
sensor->setStatus(false);
sensor++;
std::cout << "status: " << sensor->getStatus() << std::endl;
}
我注意到,程序停止与上次执行方法(饰面)将要执行的传感器 - > setStatus(假);在main.cpp中,但没有错误显示在我的终端中,我的编译器也没有抱怨。
有人有一个想法我做错了什么,我如何纠正它,使状态设置为true?
预先感谢
权解决这些问题的工具是您的调试器。在*堆栈溢出问题之前,您应该逐行执行您的代码。如需更多帮助,请阅读[如何调试小程序(由Eric Lippert撰写)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您应该\编辑您的问题,以包含一个[最小,完整和可验证](http://stackoverflow.com/help/mcve)示例,该示例再现了您的问题,以及您在调试器。 –
不少错误。更好地阅读[this](http://stackoverflow.com/questions/4421706/operator-overloading)。另外,布尔上的'++'没有多大意义。 – juanchopanza
'Sensor result = * this;'应该是'Sensor&result = * this;'以避免返回对临时引用的引用(更好的是:'return * this;'直接),即使你不使用它。你也使用增量运算符来做其他事情。不好。 –