前置++与后置++区别

对于前置++与后置++以前只知道它们的两点区别:
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

拓:
左值:指表达式结束后依然存在的持久对象,可以取地址,具名变量或对象
右值:表达式结束后就不再存在的临时对象,不可以取地址,没有名字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值