Pat*_*ane 3 c++ operator-overloading
我有以下代码分别为类 Date 重载 + 和 += 运算符。运算符 + 已成功重载,它将取整数 n 并将 Date 对象增加 n 天。这是通过应用 next_day 函数 n 次来完成的。
inline Date operator+(Date d, int n)
{
for(char j=1; j<=n; j++){
d=d.next_day(d);
}
return d;
}
inline Date operator+=(Date d, int n)
{
Date p=d+n;
return p;
}
Run Code Online (Sandbox Code Playgroud)
重载 + 运算符后,我还使用它来定义 += 的重载。但是虽然编译时没有发生错误,但是当我使用重载的 += 时,它似乎没有任何影响。
这是我的 main.cpp:
#include <iostream>
#include "Date.h"
using namespace std;
int main() {
Date Initialday = Date (12,1,2012);
Initialday+=1;
cout <<"Next day = "<< Initialday <<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行 main 函数仍然给我 12/1/2012 而不是 12/2/2012。我究竟做错了什么?注意:我已经重载 << 以可读格式输出 Date 对象,所以我认为这不是问题。
简单的解决方法是通过引用获取您的 Date 对象,修改它,然后通过引用返回它。这是 的预期行为operator+=。
inline Date& operator+=(Date &d, int n)
{
d = d + n;
return d;
}
Run Code Online (Sandbox Code Playgroud)
然而,在实施operator+=方面operator+是倒退的。它应该是相反的。 operator+=应该作用于对象的成员,直接改变它们。然后operator+应该在以下方面实施:
inline Date& operator+=(Date& lhs, int rhs)
{
... // code here to modify lhs directly
return lhs;
}
inline Date operator+(Date lhs, int rhs)
{
return lhs += rhs;
}
Run Code Online (Sandbox Code Playgroud)