返回信息流函数代码如下,用的vs2008:
#include <iostream>
using namespace std;
class Time
{
public:
Time(){minute=0;sec=0;}
Time(int m,int s):minute(m),sec(s){}
Time operator ++();
Time operator ++(int);
void display(){cout<<minute<<":"<<sec<<endl;}
private:
int minute,sec;
};
Time Time::operator ++()
{
if(++sec>=60)
{
sec-=60;
++minute;
}
return *this;
}
Time Time::operator ++(int)
{
Time temp(*this);
++sec;
if(sec>=60)
{
sec-=60;
++minute;
}
return temp;
}
int main()
{
Time time1(34,59);
time1.display();
cout<<endl;
++time1;
time1.display();
cout<<endl;
time1++;
time1.display();
cout<<endl;
return 0;
}
这个程序运行的结果是对的,time1刚开始是34:59,调用++time1后为35:00,然后调用time1++后为35:01。就是time1++这儿没太明白,在这个重载后置自增的函数里先建立了一个当前对象的副本,然后返回了这个副本,其他的语句(对sec的操作使sec加1)又没有返回,在这个函数调用完了以后应该被释放了,没有返回+1的这些操作过后的对象,为什么在这个函数调用完了以后time1仍然增加了?函数调用完成后被释放掉了,它对sec的操作没有返回应该不起作用才对啊?
这是一条镜像帖。来源:北邮人论坛 / cpp / #41972同步于 2010/7/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请教一个关于自增运算符重载的问题
IDSHOW
2010/7/31镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。