++、--運算符重載

#include <iostream>

using namespace std;

class Complex
{
    friend Complex &operator ++(Complex &c);
    friend Complex operator ++(Complex &c, int);
public:
    Complex(int a = 0, int b = 0)
    {
        m_a = a;
        m_b = b;
    }
    void show()
    {
        if (m_b == 0)
            cout << m_a << endl;
        else if(m_b>0)
            cout << m_a << " + " << m_b << "i" << endl;
        else
            cout << m_a << " - " << m_b*-1 << "i" << endl;
    }

Complex operator +(Complex &c)
{
    Complex tmp(m_a+c.m_a, m_b+c.m_b);
    return tmp;
}

// 前置--
Complex &operator --()
{
    m_a--;
    m_b--;

    return *this;
}

// 後置--
Complex operator --(int)
{
    Complex tmp(c.m_a, c.m_b);

    m_a--;
    m_b--;

    return tmp;
}



private:
    int m_a;   // 實部
    int m_b;   // 虛部
};

// 前置++
Complex &operator ++(Complex &c)
{
    c.m_a++;
    c.m_b++;

    return c;
}

// 後置++: 多了一個 int 的佔位參數,和前置++進行區分
Complex operator ++(Complex &c, int)
{
    Complex tmp(c.m_a, c.m_b);

    c.m_a++;
    c.m_b++;

    return tmp;
}

int main()
{
    Complex c1(1,2), c2(10), c3;
    //++c1;  // operator ++(c1)
c3 = ++c1 + c2;  // operator+( ++c1,  c2); ==> operator+( operator ++(c1),  c2)
c3.show();

--c1;

c3 = c1++ + c2;  // operator+( c1++,  c2); ==> operator+( operator ++(c1, 0),  c2)
c3.show();
c1.show();

return 0;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章