运算符重载意外结果
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;
我无法理解为什么一元 - 运算符不起作用。我确定我错过了一些概念。请帮忙。
#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;