我无法理解为什么一元操作员不能正常工作。我相信我错过了一些概念。请帮忙。
#include <iostream>
using namespace std;
class Distance {
private:
int feet; // 0 to infinite
int inches; // 0 to 12
public:
// required constructors
Distance(){
feet = 0;
inches = 0;
}
Distance(int f, int i){
feet = f;
inches = i;
}
// method to display distance
void displayDistance() {
cout << "F: " << feet << " I:" << inches <<endl;
}
// overloaded minus (-) operator
Distance operator- () {
return Distance(-feet, -inches);
}
};
int main() {
Distance D1(11, 10), D2(-5, 11);
-D1; // apply negation
D1.displayDistance(); // display D1
-D2; // apply negation
D2.displayDistance(); // display D2
return 0;
}
输出是:
F: 11 I:10
F: -5 I:11
我预计它会是-11 -10和5和-11
答案 0 :(得分:5)
这些行
-D1; // apply negation
-D2; // apply negation
不要做你认为他们正在做的事情。我们假设我们有一个int
变量:
int var = 3;
-var; // What does this do?
这是做什么的? -var
评估至-3
,但修改 var
等于-3
。如果您想修改var
,请按照正常情况分配给它:
var = -var; // Now var == -3
与您的Distance
类型相同。 -D1
不会修改D1
,而 不会修改它,因为这不是一元operator-
所期望的。只需将负面版本分配回自身,如下所示:
D1 = -D1;
答案 1 :(得分:1)
您的一元否定运算符返回新的Distance
对象,它不会修改现有对象。
你应该这样做。
Distance D3 = -D1;
D3.displayDistance();
答案 2 :(得分:0)
您返回新对象,但不要将其用于存储在任何地方。
你应该D1 = -D1;