一个简单的复数类,包含基本的复数四则运算。
如果被除复数的实部和虚部都为零。会输出 -nan
如有遗漏,欢迎留言补充
class Complex
{
private:
double real;
double imag;
public:
Complex()
{
real = 0;
imag = 0;
}
Complex(double a, double b)
{
real = a;
imag = b;
}
void set_real(double num)
{
real = num;
}
void set_imag(double num)
{
imag = num;
}
double get_real()
{
return real;
}
double get_imag()
{
return imag;
}
friend Complex operator + (Complex first, Complex second);
friend Complex operator - (Complex first, Complex second);
friend Complex operator * (Complex first, Complex second);
friend Complex operator / (Complex first, Complex second);
friend void operator += (Complex &first, Complex second);
friend void operator -= (Complex &first, Complex second);
friend void operator *= (Complex &first, Complex second);
friend void operator /= (Complex &first, Complex second);
};
Complex operator + (Complex first, Complex second)
{
double r = first.real + second.real;
double i = first.imag + second.imag;
return Complex(r, i);
}
Complex operator - (Complex first, Complex second)
{
double r = first.real - second.real;
double i = first.imag - second.imag;
return Complex(r, i);
}
Complex operator * (Complex first, Complex second)
{
//r=ac-bd
double r = first.real*second.real - first.imag*second.imag;
//i=bc+ad
double i = first.real*second.imag + first.imag*second.real;
return Complex(r, i);
}
Complex operator / (Complex first, Complex second)
{
//r=(ac+bd)/(c*c+d*d)
double r = (first.real*second.real + first.imag*second.imag) / (second.real*second.real + second.imag*second.imag);
//i=(bc-ad)/(c*c+d*d)
double i = (first.imag*second.real - first.real*second.imag) / (second.real*second.real + second.imag*second.imag);
return Complex(r, i);
}
void operator += (Complex &first, Complex second)
{
first = first + second;
}
void operator -= (Complex &first, Complex second)
{
first = first - second;
}
void operator *= (Complex &first, Complex second)
{
first = first*second;
}
void operator /= (Complex &first, Complex second)
{
first = first / second;
}