#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;
}
试题:复数类
最新推荐文章于 2018-10-09 22:33:27 发布