1. 程式人生 > >c++ -> 後置++運算子過載(單目運算子)

c++ -> 後置++運算子過載(單目運算子)

我們知道一個數 a 實現自增1的方式有兩種: 1. a++        2. ++a同樣的如果像把它應用到c++運算子過載裡面,實現類的某些屬性的自增1操作,也應該有兩種形式之前我已經給過實現前置++運算子過載的方法了,沒看過的小夥伴可以戳這裡當我們想要實現後置++運算子的時候,問題來了:前置++和後置++運算子函式重名了!(形式全為 :XX類名  operator++(引數) )如果是這樣當我們呼叫前置或者後置++運算子的時候,c++編譯器自然無法分辨出我們需要呼叫哪一個函式;如果我們還想實現兩者運算子過載的話,就要使用佔位符,( 例如: operator++(int) )換句話說,你得給其中一個operator()多傳入一個引數,讓c++編譯器知道,這是兩個不同的函式,避免出現重定義的情況;舉個例子:
#include <iostream>

using namespace std;

class Complex
{
private:
    int a;
    int b;
    friend Complex operator++(Complex &c1, int);

public:
    Complex(int a = 0, int b = 0)
    {
        this->a = a;
        this->b = b;
    }

    //成員函式實現後置 ++運算子過載
    /*
    Complex operator++(int)
    {
       this->a++;
       this->b++;
       Complex tmp = *this;
       return tmp;
    }
    */


    void printCom()
    {
        cout << a << "+" << b << "i" << endl;
    }
};

//定義全域性函式
Complex operator++(Complex &c1, int)
{
    Complex tmp = c1;
    c1.a++;
    c1.b++;
    return tmp;
}


int main()
{
    Complex c1(1, 2), c2(3, 4);
    c1++;
    c1.printCom();

    return 0;
}