#include <iostream>
using namespace std;
// 2 + 3i 实部 虚部
class Complex
{
friend Complex& operator++(Complex &c);
friend Complex operator++(Complex &c, int);
public:
Complex()
{
a = 0;
b = 0;
}
Complex(int a, int b)
{
this->a = a;
this->b = b;
}
void print()
{
printf ("%d + %di\n", a, b);
}
Complex operator+(const Complex &c2) const
{
Complex tmp(a+c2.a, b+c2.b);
return tmp;
}
// 前置--
Complex& operator--()
{
--a;
--b;
return *this;
}
// 后置--
Complex operator--(int)
{
Complex tmp(a, b);
a--;
b--;
return tmp;
}
private:
int a; // 实部
int b; // 虚部
};
Complex& operator++(Complex &c)
{
++c.a;
++c.b;
return c;
}
// 后置++ 有一个占位参数来与 前置++进行区分
// 先使用,再自增
Complex operator++(Complex &c, int)
{
// 定义一个临时对象来保存 c 的值
Complex tmp(c.a, c.b);
c.a++;
c.b++;
return tmp;
}
// 后置自增运算符:c++
int main()
{
Complex c, c1(1,2),c2(3,4);
// Complex operator++(Complex &c, int)
c = c1++ + c2;
c.print();
c1.print();
// 内部 :Complex operator--(Complex &c, int) ====> Complex operator--(int)
c1--;
c1.print();
return 0;
}
执行结果:
4 + 6i
2 + 3i
1 + 2i
// 前置自增运算符 ++c
int main4_1()
{
Complex c(1,2), c2(3,4);
// 复数自增 实部虚部同时自增
// operator ++
// operator ++(c) ====> operator ++(Complex &c)
// void operator ++(Complex &c)
//++c;
//c.print();
//Complex c1 = ++c; // Complex c1 = operator ++(c)
c1 = ++c + c2; // c1 = ++c + c2; (operator ++(c)).operator+(c2)
c1.print();
// 内部 Complex& operator --(Complex &c) ===> Complex& operator --()
--c1;
c1.print();
return 0;
}
执行结果:
5 + 7i
1 + 2i
前置和后置运算符总结
C++中通过一个占位参数来区分前置运算和后置运算