首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

重载单目运算符解决方案

2012-02-16 
重载单目运算符各位大侠:晚上好!请帮我分析下后置自增运算符 ++ 重载函数,这个*this的作用谢谢!#include

重载单目运算符
各位大侠:晚上好!
请帮我分析下后置自增运算符 "++ "重载函数,这个*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();
}


[解决办法]
time temp(*this);//*this起什么作用???
===============================
将temp初始化为(*this)的副本,就是temp使这个对象当前状态的副本。
[解决办法]
因为这么个约定:任何操作符的重载都应该尽可能的模仿语言内置的操作符的行为模式。
[解决办法]
++(int)表示后自增,比如i++,返回的是i没有自增前的状态,所以用temp保存先前状态,并对*this做自增,然后返回temp,即this自增前的状态

相比较++(void)就是前自增,不需要保存自增前的状态

热点排行