c++重载i++与++i;重载i--与--i;即operator++()与operator++(int);递增++递减--运算符重载


前言

递增运算符( ++ )和递减运算符( – )是 C++ 语言中两个重要的一元运算符。

其实觉得设计的有点鸡肋。。。

一、理解

首先 i++是不能对其取地址的。
在这里插入图片描述

因为i++返回的是一个右值。关于左值右值可以看看:–左值与右值–

理解为++i 操作完返回了i 的引用。而i++操作完返回的是操作之前的临时变量。

二、实现

最简单的实现,实验调用机制:

int 在 括号内是为了向编译器说明这是一个后缀形式,而不是表示整数。

class fake_int
{
	void operator++()
	{
		cout << "calling operator++()" << endl;
	}
	void operator++(int temp)
	{
		cout << "calling operator++(int temp)" << endl;
	}
};
void main()
{
	fake_int i;
	i++;
	++i;
}

**结果:**可以看出后缀i++调用的是带int 参数的重载。
在这里插入图片描述

总 结

递增和递减一般是改变对象的状态,所以一般是重载为成员函数。

重载递增递减,一定要和指针的递增递减区分开。因为这里的重载操作的是对象,而不是指针(由于指针是内置类型,指针的递增递减是无法重载的),所以一般情况的递增递减是操作对象内部的成员变量。

递增和递减分为前置和后置情况,a = ++b;(前置), a = b++;(后置)。因为符号一样,所以给后置版本加一个int形参作为区分,这个形参是0,但是在函数体中是用不到的,只是为了区分前置后置。

参考

–左值与右值–

https://blog.csdn.net/qq_27278957/article/details/85269245?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

https://blog.csdn.net/weixin_34321753/article/details/91364200

https://www.runoob.com/cplusplus/increment-decrement-operators-overloading.html

  • 3
    点赞
  • 3
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:像素格子 设计师:CSDN官方博客 返回首页
评论

打赏作者

怎么这么帅啊

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值