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

目录

  • 前言
  • 一、理解
  • 二、实现
  • 总 结
  • 参考


前言

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

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

一、理解

首先 i++是不能对其取地址的。
c++重载i++与++i;重载i--与--i;即operator++()与operator++(int);递增++递减--运算符重载_第1张图片

因为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

你可能感兴趣的:(c/c++,c++)