C++(25)单目运算

#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++中通过一个占位参数来区分前置运算和后置运算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值