重载单目运算符

fengyan1983 2007-04-15 06:56:23
各位大侠:晚上好!
请帮我分析下后置自增运算符"++"重载函数,这个*this的作用
谢谢!
#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;
int sec;
};
time time::operator++()
{ if(++sec>=60)
{sec-=60;
++minute;}
return *this;
}

time time::operator ++(int)
{ time temp(*this);//*this起什么作用???
sec++;
if(sec>=60)
{ sec-=60;
++minute;}

return temp;
}



void main()
{time time1(34,59),time2;
cout<<"time1:";
time1.display();
++time1;
cout<<"++time1:";
time1.display();
time2=time1++;
cout<<"time1++";
time1.display();
cout<<"time2:";
time2.display();
}
...全文
201 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
believefym 2007-04-16
  • 打赏
  • 举报
回复
++(int)表示后自增,比如i++,返回的是i没有自增前的状态,所以用temp保存先前状态,并对*this做自增,然后返回temp,即this自增前的状态

相比较++(void)就是前自增,不需要保存自增前的状态
qingcairousi 2007-04-16
  • 打赏
  • 举报
回复
因为这么个约定:任何操作符的重载都应该尽可能的模仿语言内置的操作符的行为模式。
fengyan1983 2007-04-15
  • 打赏
  • 举报
回复
能不能再说详细点就从 time2=time1++说起吧!谢谢!
hellox 2007-04-15
  • 打赏
  • 举报
回复
因为必须记住对象在+1前的当前状态,所以要time temp(*this);
hellox 2007-04-15
  • 打赏
  • 举报
回复
time temp(*this);//*this起什么作用???
===============================
将temp初始化为(*this)的副本,就是temp使这个对象当前状态的副本。

65,212

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧