单目运算符重载

前置单目运算符重载规则:

  • 设U为前置单目运算符,oprd为类A的对象,则U应被重载为A类的成员函数
  • 方式:oprd.operator U()


后置单目运算符重载规则:

  • 后置单目运算只有两个:"++"和"--"
  • 很显然"++"和"--"也可以作为前置单目运算符,这样oprd.operator ++()就会歧义,到底是重置前置的"++"还是后置的"++"呢?
  • 解决方法:强行传一个没有意义的int参数只是为了区分,即oprd.operator ++(int)


例子,重载时钟类实的"++"和"--":

#include<stdio.h>
class Clock
{
	public:
		Clock(int h=0, int m=0, int s=0):  h(h), m(m), s(s)  {}
		void Show()  {  printf("%02d:%02d:%02d\n", h, m, s);  }
		Clock operator ++ ()		//前置"++"重载
		{
			s++;
			if(s==60)  m++, s = 0;
			if(m==60)  h++, m = 0;
			if(h==24)  h = 0;
			return *this;
		}
		Clock operator ++ (int)		//后置"++"重载
		{
			Clock old = *this;
			++(*this);
			return old;
		}
	private:
		int h, m, s;
};
int main(void)
{
	Clock c(23, 59, 58);
	(++c).Show();
	(c++).Show();
	(++c).Show();
	c.Show();
	return 0;
}
/*
23:59:59
23:59:59
00:00:01
00:00:01
*/

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值