自增自減運算符重載


遞增運算符(++)和遞減運算符(--)是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,但是在函數體中用不到,只是為了區分前置后置而已。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM