簡體   English   中英

操作員重載意外結果

[英]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

不知道我在哪里想念一個概念。 順便說一句我在這里找到它

這些線

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

一元求反運算符返回新的Distance對象,它不會修改現有對象。

你應該做例如

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

您返回新對象,但不使用它存儲任何地方。

你應該做D1 = -D1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM