现在的位置: 首页 > 综合 > 正文

试题:复数类

2013年08月18日 ⁄ 综合 ⁄ 共 2512字 ⁄ 字号 评论关闭

 

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

抱歉!评论已关闭.