對於一個學校項目,我必須在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;'直接),即使你不使用它。你也使用增量運算符來做其他事情。不好。 –