重载自增和自减

文章讨论了C++中前置和后置自增运算符的区别,以及在重载时如何处理返回值。后置++需要返回一个副本,避免返回局部变量引用导致的问题,这可能涉及到副本构造函数的使用。同时,文章提到了如何通过添加const限制后置++的连续使用,以保持与原生行为一致。
摘要由CSDN通过智能技术生成

1.前置++

hint& hint::operator++()  /这里返回值可以用引用,也可以不用,用的话更省内存
{
	*this = *this+ 1;
	return *this;
}
hint& operator++(hint& _gold)  /全局函数
{
	_gold = _gold + 1;
	return _gold;
}

--类似

2.后置++

后置++与前置++的区分,因为前置和后置的符号一模一样,区分的方式就在于后置++多了一个默认的占位参数,这个参数值为多少不重要,只是用来区分的

特别注意*:这里的占位参数只能是int类型,不能是short、unsignde等等

hint hint::operator++(int)
{
	hint val = *this;
	*this = *this + 1;
	return val;
}

这里的返回值为什么不是引用呢,因为不能返回局部变量的引用,当代码进行到hint val=*this时,会调用默认的副本构造,会把*this的内存空间全部复制一份,在析构的时候就会出错,并且返回val时,因为它时局部变量,所以会复制一份val的值来返回,这里也会调用默认副本构造,也会出错。所以这里我们可以重写一下副本构造函数。

hint::hint(hint& val): hint((int) val)
{

}

 另外,我们也可以删除掉默认的副本构造

hint(hint& val)=delete;

不过后置++重载里面要写成这样,如果不进行显示转换,会出错

hint hint::operator++(int)
{
	hint val =(int) *this;
	*this = *this + 1;
	return val;
}

那么问题来了,为什么return val时,就不会出错呢,因为return val更多的是复制val的内存,这里我也解释不清楚

知识扩展*:原生的后置++不支持这种,gold++++,但我们的重载支持,如果想要它和原生的一样,可以在返回值前面加上const,这样就限定了它的返回值不能再加第二次。

const hint hint::operator++(int)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值