对于前置++与后置++以前只知道它们的两点区别:
1. 前置++:先加再用;后置++:先用后加。
2. ++i效率比i++效率高;
今日又添加一项:
3. 前置++可操作,后置++不可操作
只知其果,不明其因非学者姿态。
下面是前置++与后置++实现的demo:
#include <iostream>
using namespace std;
class Clock {
int hour, min, second;
public:
Clock(int newhour, int newmin, int newsecond);
void showClock()const;
Clock& operator ++(); //前置++;可操作原因:返回的引用,还可以对对象进行操作。
Clock operator ++(int); //后置++;参数为int,用于区别前置++;可使用const修饰
};
Clock::Clock(int newhour, int newmin, int newsecond) {
if (0<= newhour && newhour < 24 && 0 <= newmin && newmin < 60 && 0 <=newsecond && newsecond < 60) {
this->hour = newhour; //??为什么要加this ,事实证明加不加效果一样。
this->min = newmin;
this->second = newsecond;
}
else {
cout << "Time error!" << endl;
}
}
void Clock::showClock() const {
cout << hour << ":" << min << ":" << second << endl;
}
Clock& Clock::operator ++() {
second++;
if (second >= 60) {
second -= 60;
min++;
if (min >= 60) {
min -= 60;
hour = (hour + 1) % 24;
}
}
return *this;
}
Clock Clock::operator ++(int) { //返回一定为对象嘛?看情况,大部分是。
Clock old = *this; //后置++效率低一点的原因。
++(*this);
return old; //返回的是右值,是副本
}
int main()
{
Clock myclock(22, 59, 59);
cout << "第一次时间: ";
myclock.showClock();
cout << "Clock++: ";
(myclock++).showClock();
cout << "++Clock: ";
(++myclock).showClock();
return 0;
}
//result:
//第一次时间: 22:59 : 59
//Clock++ : 22 : 59 : 59
//++Clock : 23 : 0 : 1
拓:
左值:指表达式结束后依然存在的持久对象,可以取地址,具名变量或对象
右值:表达式结束后就不再存在的临时对象,不可以取地址,没有名字。