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
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值