复数的四则运算实现(运算符重载)

复数的四则运算实现(运算符重载)

#include <iostream>
using namespace std;

class complex
{
public:
    complex(double real, double image) : m_real(real), m_image(image) {}
    complex() //无参构造
    {
        m_real = 0.0;
        m_image = 0.0;
    }
    // complex(double real):m_real(real) {}

    void display();
    complex operator+=(const complex &A);
    complex operator-=(const complex &A);
    complex operator*=(const complex &A);
    complex operator/=(const complex &A);

    complex &operator++();               //前置加加
    complex operator++(int);             //后置加加
    complex &operator--();               //前置减减
    complex operator--(int);             //后置减减
    operator double() { return m_real; } //重载强制类型转换符号
    operator int() { return m_real; }    //重载强制类型转换符号

    friend complex operator+(const complex &A, const complex &B);
    friend complex operator-(const complex &A, const complex &B);
    friend complex operator*(const complex &A, const complex &B);
    friend complex operator/(const complex &A, const complex &B);

    friend istream &operator>>(istream &in, complex &a);
    friend ostream &operator<<(ostream &in, const complex &a);

private:
    double m_real;  //实部
    double m_image; //虚部
};

complex complex::operator+=(const complex &A)
{
    this->m_real = this->m_real + A.m_real;
    this->m_image = this->m_image + A.m_image;
    return *this;
}

complex complex::operator-=(const complex &A)
{
    this->m_real = this->m_real - A.m_real;
    this->m_image = this->m_image - A.m_image;
    return *this;
}

complex complex::operator*=(const complex &A)
{
    this->m_real = this->m_real * A.m_real - this->m_image * A.m_image;
    this->m_image = this->m_image * A.m_real + this->m_real * A.m_image;
    return *this;
}

complex complex::operator/=(const complex &A)
{
    this->m_real = (this->m_real * A.m_real + this->m_image * A.m_image) / (A.m_real * A.m_real + A.m_image * A.m_image);
    this->m_image = (this->m_image * A.m_real - this->m_real * A.m_image) / (A.m_real * A.m_real + A.m_image * A.m_image);
    return *this;
}

complex operator+(const complex &A, const complex &B)
{
    complex C;
    C.m_real = A.m_real + B.m_real;
    C.m_image = A.m_image + B.m_image;
    return C;
}

complex operator-(const complex &A, const complex &B)
{
    complex C;
    C.m_real = A.m_real - B.m_real;
    C.m_image = A.m_image - B.m_image;
    return C;
}

complex operator*(const complex &A, const complex &B)
{
    complex C;
    C.m_real = A.m_real * B.m_real - A.m_image * B.m_image;
    C.m_image = A.m_image * B.m_real + A.m_real * B.m_image;
    return C;
}

complex operator/(const complex &A, const complex &B)
{
    complex C;
    C.m_real = (A.m_real * B.m_real + A.m_image * B.m_image) / (B.m_real * B.m_real + B.m_image * B.m_image);
    C.m_image = (A.m_image * B.m_real - A.m_real * B.m_image) / (B.m_real * B.m_real + B.m_image * B.m_image);
    return C;
}

complex &complex::operator++()
{
    this->m_real++;
    this->m_image++;
    return *this;
}

complex complex::operator++(int)
{
    complex temp = *this;
    this->m_real++;
    this->m_image++;
    return temp;
}

complex &complex::operator--()
{
    this->m_real--;
    this->m_image--;
    return *this;
}

complex complex::operator--(int)
{
    complex temp = *this;
    this->m_real--;
    this->m_image--;
    return temp;
}

istream &operator>>(istream &in, complex &a)
{
    in >> a.m_real >> a.m_image;
    return in;
}

ostream &operator<<(ostream &out, const complex &a)
{
    out << a.m_real << "+" << a.m_image << "i";
    return out;
}

void complex::display()
{
    cout << m_real << "+" << m_image << "i" << endl;
}

int main()
{

    complex A(1, 2);
    cout << A << endl;
    complex B(2.3, 3.4);
    cout << B << endl;

    //complex C = A + 2.2;
    // cout << C << endl;

    complex d;
    cin >> d;
    cout << ++d << endl;
    cout << d++ << endl;
    cout << d << endl;
    cout << --d << endl;
    cout << d-- << endl;
    cout << d << endl;

    int a = A;
    cout << a << endl;

    return 0;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@小高同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值