C++学习记录-面向对象-运算符重载3-递增递减运算符重载

先来创建一个类

1
2
3
4
class level {
public:
int lv;
};

一、递增递减运算符

  1. 递增运算符++

    (1).前置递增:先递增,再取值。因此前置递增应该返回递增后的值。为了实现可以连续前置递增,应该返回一个引用。若返回的是一个类,连续递增时不会影响实际的值(类似于值传递和引用传递的关系)

    返回引用而不返回指针是为了不要解引用,方便。

    示例:

    1
    2
    3
    4
    5
    6
    level& operator++()
    {
    lv++;
    return *this;
    }
    //返回了level类的一个引用。

    分析:由于该函数不需要传入参数,则利用解引用this指针来返回

    (2).后置递增:先取值,再递增。因此应该先创建一个临时对象储存,实现递增后返回临时对象。

    此处应该返回的是一个值。因为函数执行完后临时对象就会被销毁,不可以返回引用,否则是非法操作。

    示例:

    1
    2
    3
    4
    5
    6
    level operator++(int)
    {
    level temp = *this;
    lv++;
    return temp;
    }

    分析:不可以用返回值来重载函数,因此使用占位参数int来区分前置后置

  2. 递减运算符–

    同理可得:

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    level& operator--()
    {
    lv--;
    return *this;
    }//前置递减

    level operator--(int)
    {
    level temp = *this;
    lv--;
    return temp;
    }//后置递减

二、在全局函数区进行重载

需要传入参数

1
2
3
4
5
6
7
8
9
10
11
12
level& operator--(level &a)
{
a.lv--;
return a;
}

level operator--(level &a,int)
{
level temp = a;
a.lv--;
return temp;
}