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