自增自减运算符重载

Posted wanghao-boke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自增自减运算符重载相关的知识,希望对你有一定的参考价值。

递增运算符(++)和递减运算符(--)是C++语言中两个重要的一元运算符。

/***
addMyself.cpp
***/
#include<iostream>
using namespace std;

class Time

    private:
        int hours;
        int minutes;
    public:
        Time()
        
            hours = 0;
            minutes = 0;
        
        Time(int h,int m)
        
            hours = h;
            minutes = m;
        

        void displayTime()
        
            cout << "H: " << hours << " M" << minutes << endl;
        
        //重载前缀递增运算符
        Time operator++()
        
            ++minutes;
            if(minutes >= 60)
                   
                ++hours;
                minutes -= 60;
            
            return Time(hours,minutes);
        
        //重载后缀递增运算符
        Time operator++(int)
        
            Time T(hours,minutes);
            ++minutes;
            if(minutes >= 60)
            
                ++hours;
                minutes -= 60;
            
            return T;
        
;

int main()

    Time T1(11,59),T2(10,40);

    ++T1;
    T1.displayTime();
    ++T1;
    T1.displayTime();

    T2++;
    T2.displayTime();
    T2++;
    T2.displayTime();
    return 0;

运行结果:

exbot@ubuntu:~/wangqinghe/C++/20190808$ g++ addMyself.cpp -o addMyself

exbot@ubuntu:~/wangqinghe/C++/20190808$ ./addMyself

H: 12 M0

H: 12 M1

H: 10 M41

H: 10 M42

 

注意:int在括号是为了向编译器说明这是一个后缀形式,而不是表示整数。

前缀形式重载调用Check operator++(),后缀形式重载调用operator++(int)

/***
addOver.cpp
***/
#include<iostream>
using namespace std;

class Check

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

        Check operator ++ (int)
        
            Check temp;
            temp.i = i++;
            return temp;
        

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

int main()

    Check obj1,obj;
    obj.Display();
    obj1.Display();

    obj1 = ++ obj;
    obj.Display();
    obj1.Display();

    obj1 = obj++;
    obj.Display();
    obj1.Display();
    
    return 0;

运行结果:

exbot@ubuntu:~/wangqinghe/C++/20190808$ ./addOver

i = 0

i = 0

i = 1

i = 1

i = 2

i = 1

 

递减和递增运算符重载:

  1. 递增和递减一般是对改变对象的状态,所以一般是重载为成员函数。
  2. 重载递增递减,一定要和指针的递增递减区分。因为这里重载操作的是对象,而不是指针(由于指针是内置类型,指针的递减递增是无法重载的),所以一般情况的递增递减是操作对象内部的成员变量。
  3. 递增和递减分为前置和后置情况,a = ++b;(前置), a = b++。因为符号一样,所以给后置版本加一个int形参作为区分。这个形参是0,但是在函数体中用不到,只是为了区分前置后置而已。

以上是关于自增自减运算符重载的主要内容,如果未能解决你的问题,请参考以下文章

1-3-1 Java运算符,结构,数组--自增自减运算符,swicth,二维数组,方法重载,可变参数

在C语言中自增自减运算符有啥作用?

JAVA自增自减运算符,i++,++i

自增、自减运算符的使用?

Javascript自增自减运算符

JS中的自增自减问题