++、--运算符重载

#include 

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;

}

你可能感兴趣的:(++、--运算符重载)