📜  递增++和递减-C++编程中的运算符重载

📅  最后修改于: 2020-09-25 06:42:54             🧑  作者: Mango

在此示例中,您将学习重载C++中的递增++和递减- 运算符 。

在本教程中,以最佳方式重载++和递减- 运算符 ,即,如果++ 运算符对一个对象进行运算 ,则将数据成员的值增加1,而如果- 运算符对数据成员的值减小1。用来。

示例1:无返回类型的Prefix ++ Increment运算符重载

#include 
using namespace std;

class Check
{
    private:
       int i;
    public:
       Check(): i(0) {  }
       void operator ++() 
          { ++i; }
       void Display() 
          { cout << "i=" << i << endl; }
};

int main()
{
    Check obj;

    // Displays the value of data member i for object obj
    obj.Display();

    // Invokes operator function void operator ++( )
    ++obj; 
  
    // Displays the value of data member i for object obj
    obj.Display();

    return 0;
}

输出

i=0
i=1

最初,当对象obj被声明,数据成员的值i为对象obj是0(构造函数初始化i为0)。

当对obj ++ 运算符操作时,将调用运算符 函数 void operator++( ) ,从而将数据成员 i的值增加为1。

就您不能使用代码的意义而言,该程序是不完整的:

obj1 = ++obj;

这是因为上述程序中的运算符 函数的返回类型为空。

这是上面程序的小修改,因此您可以使用代码obj1 = ++obj

示例2:带返回类型的前缀增量++ 运算符重载

#include 
using namespace std;

class Check
{
  private:
    int i;
  public:
    Check(): i(0) {  }

    // Return type is Check
    Check operator ++()
    {
       Check temp;
       ++i;
       temp.i = i;

       return temp;
    }

    void Display()
    { cout << "i = " << i << endl; }
};

int main()
{
    Check obj, obj1;
    obj.Display();
    obj1.Display();

    obj1 = ++obj;

    obj.Display();
    obj1.Display();

    return 0;
}

输出

i = 0
i = 0
i = 1
i = 1

这个程序类似于上面的程序。

唯一的区别是, 运算符 函数的返回类型是Check在这种情况下,其允许使用这两个码++obj; obj1 = ++obj; 。这是因为,从运算符 函数返回的temp存储在对象obj

因为, 运算符 函数的返回类型Check ,你也可以的值赋给obj到另一个对象。

注意,=(赋值运算符)不需要重载,因为该运算符已在C++库中重载。

示例3:Postfix增量++运算符重载

到目前为止,增量运算符的重载只有在以前缀形式使用时才是正确的。

这是对上面程序的修改,以使此功能适用于前缀形式和后缀形式。

#include 
using namespace std;

class Check
{
  private:
    int i;
  public:
    Check(): i(0) {  }
    Check operator ++ ()
    {
        Check temp;
        temp.i = ++i;
        return temp;
    }

    // Notice int inside barcket which indicates postfix increment.
    Check operator ++ (int)
    {
        Check temp;
        temp.i = i++;
        return temp;
    }

    void Display()
    { cout << "i = "<< i <

输出

i = 0
i = 0
i = 1
i = 1
i = 2
i = 1

当增量运算符以前缀形式重载时; Check operator ++ ()被调用,但是当增量运算符以后缀形式重载时; Check operator ++ (int)被调用。

注意, int放在括号内。此int向编译器提供信息,它是运算符的后缀版本。

不要混淆此int并不表示整数。

示例4:运算符的减量超载-运算符

递减运算符可以像增量运算符一样重载。

#include 
using namespace std;

class Check
{
  private:
    int i;
  public:
    Check(): i(3) {  }
    Check operator -- ()
    {
        Check temp;
        temp.i = --i;
        return temp;
    }

    // Notice int inside barcket which indicates postfix decrement.
    Check operator -- (int)
    {
        Check temp;
        temp.i = i--;
        return temp;
    }

    void Display()
    { cout << "i = "<< i <

输出

i = 3
i = 3
i = 2
i = 2
i = 1
i = 2

同样,一元运算运算符,如:!,〜等也可以类似的方式重载。