运算符重载意外结果

Operator Overloading unexpected result

我无法理解为什么一元 - 运算符不起作用。我确定我错过了一些概念。请帮忙。

#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

不知道我哪里漏了一个概念。顺便说一句,我找到了 here

你的一元否定运算符 returns 新的 Distance 对象,它不会修改现有对象。

你应该做,例如

Distance D3 = -D1;
D3.displayDistance();

您 return 新对象,但不要用它来存储任何地方。

你应该D1 = -D1;

这些行

-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;