C++中自增运算符(++)与自减(--)运算符的重载

C++中自增运算符(++)与自减(--)运算符的重载

  • 运算符重载
  • 自增运算符(++)与自减(--)运算符的重载
  • 结果分析

运算符重载

运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。

运算符重载需要以下函数

/*类名*/ operator /*要重载的运算符*/()//函数声明

/*类名*/ /*类名*/::operator /*要重载的运算符*/() //函数主体
{
    //具体操作
}

自增运算符(++)与自减(–)运算符的重载

下面以一道题为例,来理解自增运算符(++)与自减(–)运算符的重载。

题目:编写程序定义Point类,在类中定义整型的私有成员变量_x_y,定义成员函数Point& operator++();Point operator++(int);以实现对Point类重载“++”(自增)运算符,定义成员函数Point& operator--();Point operator--(int);以实现对Point类重载“--”(自减)运算符,实现对坐标值的改变。

特别注意:由于编译器必须能够识别出前缀自增与后缀自增,人为规定用 operator++() 和 operator–() 重载前置运算符,用 operator++(int) 和 operator–(int) 重载后置运算符,在这里的 int 并没有什么实际的意义,仅仅是为了区分重载的是前置的形式还是后置的形式。

根据上述运算符重载的函数,代码如下

#include
using namespace std;
class Point
{
private:
 int _x;
 int _y;
public:
 Point(int x = 0, int y = 0) { _x = x; _y = y; }
 Point operator ++();//前置型
 Point operator ++(int);//后置型
 Point operator --();//前置型
 Point operator --(int);//后置型
 void Display();
 Point pp() { _x++; _y++; return *this; }
 Point mm() { _x--; _y--; return *this; }
 ~Point(){}
};
Point Point::operator ++() //前置型自增
{
    return pp();
}
Point Point::operator ++(int)//后置型自增
{
 Point p = *this;
 pp();
 return p;
}
Point Point::operator --()//前置型自减
{
 return mm();
}
Point Point::operator --(int)//后置型自减
{
 Point p = *this;
 mm();
 return p;
}
void Point::Display()
{
 cout << "( " << _x << " , " << _y << " )" << endl;
}
int main()
{
 Point a(1, 2);
 Point b;
 b = ++a;
 b.Display();
 b = a++;
 b.Display();
 b = --a;
 b.Display();
 b = a--;
 b.Display();
}

运行结果
C++中自增运算符(++)与自减(--)运算符的重载_第1张图片

结果分析

前提
1.a的初始坐标值为(1,2)。
2.自增、自减运算对x、y同时起作用。
结果分析
1.第一步,前置自增运算,先自增,再赋值给b。操作结束后a为(2,3),b为(2,3)。
2.第二步,后置自增运算,先赋值给b,后自增。操作结束后a为(3,4),b为(2,3)。
3.第三步,前置自减运算,先自减,再赋值给b。操作结束后a为(2,3),b为(2,3)。
4.第四步,后置自减运算,先赋值给b,后自减,操作结束后a为(1,2),b为(2,3)。

你可能感兴趣的:(C++学习笔记)