#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;
}