试题:复数类

46 篇文章 0 订阅
22 篇文章 0 订阅
 
#include <iostream>
using namespace std;

class Complex
{
public :
	Complex(double real = 0.0, double img = 0.0);
	Complex(const Complex & other);

	friend ostream & operator << (ostream & os, const Complex & obj);

	Complex & operator += (const Complex & other);
	Complex & operator -= (const Complex & other);
	Complex & operator *= (const Complex & other);
	Complex & operator /= (const Complex & other);

    Complex operator + (const Complex & other);
	Complex operator - (const Complex & other);
	Complex operator * (const Complex & other);
	Complex operator / (const Complex & other);

private :
	double m_real;
	double m_imag;
};

Complex::Complex(double real, double imag)
 : m_real(real), m_imag(imag)
{

}

Complex::Complex(const Complex & other)
 : m_real(other.m_real), m_imag(other.m_imag)
{

}


ostream & operator << (ostream & os, const Complex & obj)
{
    cout << "(";
	if (obj.m_real > 0.000001 || obj.m_real < -0.000001)
	{
		os << obj.m_real;

	    if (obj.m_imag > 0.000001)
		{
			os << "+" << obj.m_imag << "i";
		}
		else if (obj.m_imag < -0.000001)
		{
			os << obj.m_imag << "i";
		}
	}
	else
	{
        os << obj.m_imag << "i";
	}
	cout << ")";

	return os;
}

Complex & Complex::operator += (const Complex & other)
{
	m_real += other.m_real;
	m_imag += other.m_imag;
	return (*this);
}

Complex & Complex::operator -= (const Complex & other)
{
	m_real -= other.m_real;
	m_imag -= other.m_imag;
	return (*this);
}

Complex & Complex::operator *= (const Complex & other)
{
	double real = m_real * other.m_real - m_imag * other.m_imag;
    double imag = m_real * other.m_imag + m_imag * other.m_real;
    m_real = real;
    m_imag = imag;
    return (*this);
}

Complex & Complex::operator /= (const Complex & other)
{
    double base = (other.m_real * other.m_real + other.m_imag * other.m_imag);
	double real = (m_real * other.m_real + m_imag * other.m_imag) / base;
    double imag = (m_imag * other.m_real - m_real * other.m_imag) / base;
    m_real = real;
    m_imag = imag;
    return (*this);
}

Complex Complex::operator + (const Complex & other)
{
	return (Complex(*this) += other);
}

Complex Complex::operator - (const Complex & other)
{
    return (Complex(*this) -= other);
}

Complex Complex::operator * (const Complex & other)
{
    return (Complex(*this) *= other);
}

Complex Complex::operator / (const Complex & other)
{
    return (Complex(*this) /= other);
}

Complex operator + (double real, const Complex & obj)
{
    return (Complex(real) += obj);
}

Complex operator - (double real, const Complex & obj)
{
    return (Complex(real) -= obj);
}

Complex operator * (double real, const Complex & obj)
{
    return (Complex(real) *= obj);
}

Complex operator / (double real, const Complex & obj)
{
    return (Complex(real) /= obj);
}

int main()
{
    Complex a(1.2, 3.4);
    Complex b(1.3, 5.7);
    cout << " a = " << a << endl;
    cout << " b = " << b << endl;
    cout << " a + b = " << (a + b) << endl;
    cout << " a - b = " << (a - b) << endl;
    cout << " a * b = " << (a * b) << endl;
    cout << " a / b = " << (a / b) << endl;

    cout << " a / 1 = " << (a / 1) << endl;
    cout << " 1 * a = " << (1 * a) << endl;
    cout << " a + 'a' = " << (a + 'a') << endl;
    cout << " 'a' - a = " << ('a' - a) << endl;

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值