概述
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的值,而并非引用的原因
后置递增运算符重载函数运行完后,栈区的数据就会被清空,那么在使用引用就会发生错误
关于递减运算符
递减运算符的操作和递增运算符其实相同,只是运算符从++变成了–,我会在后面补上递减运算符重载的操作代码
最后
以上就是单薄野狼为你收集整理的c++-----递增运算符重载c++ ------递增运算符重载的全部内容,希望文章能够帮你解决c++-----递增运算符重载c++ ------递增运算符重载所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复