重载 - 运算符在 C++ 中

Overloading of - operator in c++

本文关键字:C++ 运算符 重载      更新时间:2023-10-16

为什么下面的代码会更改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- () {
feet = -feet;
inches = -inches;
return Distance(feet, inches);
}
};
int main() {
Distance D1(1, 10), D2(-5, 11);
-D1;                     // apply negation
D1.displayDistance();    // display D1
-D2;                     // apply negation
D2.displayDistance();    // display D2
return 0;
}

输出为

女: -1 I:-

10
女: 5 I:-11

如果你不希望某个特定的函数改变你的类变量,你必须在声明后立即使用const单词。因此,当您在此函数中使用赋值句子时,编译器会向您抛出错误。 以下行更改您正在处理的当前对象:

feet = -feet;
inches = -inches;

当您使用const时,以下函数将向您抛出编译器时间异常:

Distance operator- () const {
feet = -feet; // Compiler exception..
inches = -inches; // Compiler exception..
return Distance(-feet, -inches);
}

据我了解,以下代码执行您想要的操作:

Distance operator- () const {
return Distance(-feet, -inches);
}