c++-----递增运算符重载

c++ ------递增运算符重载

前言

在cpp中,可以使用递增(递减)运算符的重载来完成自定义数据的+1或-1的操作

关于递增运算符

首先我们得先回忆起或者知道a++和++a的区别
a++是后置递增运算,也就是先执行a,在++
而++a是先++,在执行a
用两段代码来展示区别:

这里先定义变量a

int a=0;

首先是后置运算符

cout<<a++<<endl;
cout<<a<<endl;

输出结果为
0
1

然后是前置递增运算符

cout<<++a<<endl;
cout<<a<<endl;

输出结果为
1
1

从代码的输出结果不难得出a++和++a的区别,这之间的区别,在运算符重载的函数中的实现也大相径庭

那么事不宜迟,上代码

#include<iostream>
#include<string>
using namespace std;

//递增运算符重载
class Myinterge
{
//使用左移运算符重载来输出
	friend ostream& operator<<(ostream& cout, Myinterge myint);
public:
	Myinterge()
	{
		m_Num = 0;
	}
	//前置递增运算符重载
	Myinterge& operator++();//函数声明
	//后置递增运算符重载
	//形参使用占位函数int来让编译器知道这是函数重载
	Myinterge operator++(int);


private:
	int m_Num;
	}


ostream& operator<<(ostream& cout, Myinterge myint)
{
	cout << myint.m_Num;
	return cout;
}

那么这里的左移运算符重载为什么不使用引用来传入对象呢?
接下来结合递增运算符重载来进行解释

首先是前置递增运算符

这里在类外声明函数

Myinterge& Myinterge::operator++()
	{
		//前置递增运算符重载,先++
		m_Num++;
		//然后返回自身,this指针指向对象本身的地址,
		//*this是指向对象本身的值,也就是+1后的值
		return *this;
			
	}

前置递增运算符重载
使用引用是为了更好的实现函数功能
方便使用二次重载递增,也就是cout<<++(++myint)<<endl;,多次递增的功能,若不返回引用,则无法实现连续递增的功能

Myinterge Myinterge::operator++(int)
Myinterge operator++(int)//使用占位参数来实现函数重载
	{
	//先创建一个临时的对象来保存当前的值
		Myinterge temp = *this;
		m_Num++;//变量++
		return temp;//返回本身的值(也就是临时对象所存储的值)
		
	}

后置递增运算符重载不使用引用返回的原因是因为
前面所创建的temp的临时对象属于局部对象,在函数实现完成后,系统会自动清空数据,
若返回引用就属于非法操作,这也就是为什么,在左移运算符重载中,形参传入的对象是一个Myinterge myint的值,而并非引用的原因
后置递增运算符重载函数运行完后,栈区的数据就会被清空,那么在使用引用就会发生错误

关于递减运算符

递减运算符的操作和递增运算符其实相同,只是运算符从++变成了–,我会在后面补上递减运算符重载的操作代码

  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值