我有以下代码分别为类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;
}
在重载+运算符后,我使用它来定义+ =的重载。但是,虽然在编译过程中没有发生错误,但是当我使用重载的+ =时,它似乎没有任何影响。
这里是我的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;
}
运行的主要功能仍然给我2012年12月1日,而不是2012年12月2日。我究竟做错了什么?注意:我已经超载了< <以可读格式输出Date对象,所以我不认为这是问题所在。
非常感谢!我同意,它有些倒退 - 但在这种情况下,+ =和+似乎同样简单,因为我已经定义了next_day函数,并且认为我可以使用它。我想作为一个初学者,我首先定义+看起来更直观! – 2013-02-17 07:45:35
只是为了学习,请问为什么以下不行? 'inline Date&operator + =(Date&d,int n) { Date p = d + n; return p; }' 它给了我一个错误消息,说本地变量p被自动返回。这是什么意思? – 2013-02-17 07:45:58
@PatrickJane:这个问题并不是真的那么简单,比另一个更直接。这个问题主要是表现。 'operator +'接受两个对象,并从它们中创建一个完全独立的对象。但是没有理由'operator + ='应该需要构造一个新的对象。通过以'operator +'的形式实现'operator + =',您可以复制对象,修改副本,然后将副本复制回原始对象。这是两个不必要的副本,当它需要做的只是修改原始对象。 – 2013-02-17 07:53:23