读书人

重载单目运算符解决方案

发布时间: 2012-02-16 21:30:36 作者: rapoo

重载单目运算符
各位大侠:晚上好!
请帮我分析下后置自增运算符 "++ "重载函数,这个*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)就是前自增,不需要保存自增前的状态

读书人网 >C++

热点推荐