⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 complex.cpp

📁 一个复数类的实现方法
💻 CPP
字号:
#include <math.h>
#include <stdio.h>
//#include "iostream.h" 
#define pi 3.14159265

class Complex  
{
private:

	double real;
	double imaginary;
	

public:

	Complex();
	Complex(double re,double ima);
	
	double GetAbs();//获得模
	double GetAzimuth();//获得主幅角
	void Reset(double re,double ima);//重置复数的实部和虚部
	void SetReal(double re);
	void SetImaginary(double ima);
	double GetReal();//获得实部虚部
	double GetImaginary();
	Complex GComplex();//共轭复数
	void Show();

//重载运算符
	Complex & operator = (Complex X);
	Complex operator + (Complex X);
	Complex operator - (Complex X);
	Complex operator * (Complex X);
	Complex operator / (Complex X);
	Complex operator ^ (int n);
	bool operator == (Complex X);
	bool operator != (Complex X);

	~Complex();

}/*;*/

Complex::Complex(double re,double ima)
{
	real=re;
	imaginary=ima;
}

Complex::Complex()
{
	real=0;
	imaginary=0;
}


 double Complex::GetAbs()
 {
		return sqrt(real*real+imaginary*imaginary);
 }

 
double Complex::GetAzimuth()
{
	double a,b;
	a=real;
	b=imaginary;
	if(a==0)
	{
		if(b==0)
		{
			return 0;
		}
		else
		{
			if(b>0)
			{
				return pi/2;
			}
			else
			{
				return 3*pi/2;
			}
		}
	}
	else
	{
		if(a>0)
		{
			if(b>=0)
			{
				return atan(b/a);
			}
			else
			{
				return 2*pi+atan(b/a);
			}
		}
		else
		{
			return pi+atan(b/a);
		}
	}
}

void Complex::SetReal(double re)
{
	real=re;
}

void Complex::SetImaginary(double ima)
{
	imaginary=ima;
}


void Complex::Reset(double re,double ima)
{
	real=re;
	imaginary=ima;
	return;
}
double Complex::GetReal()
{
	return real;
}

double Complex::GetImaginary()
{
	return imaginary;
}



Complex Complex::GComplex()
{
	Complex temp;
	temp.real=real;
	temp.imaginary=-imaginary;
	return temp;
}

void Complex::Show()
{
	if(imaginary>=0)
	{
		printf("%.4f+%.4fj\n",real,imaginary);
        //cout <<this->real<<"+"<<this->imaginary<<"j"<<endl;	
	}
	else
	{
		printf("%.4f-%.4fj\n",real,-imaginary);
	}

}


Complex & Complex::operator = (Complex X)
{
	real=X.GetReal();
	imaginary=X.GetImaginary();
	return *this;
}


Complex Complex::operator + (Complex X )
{
	Complex temp;
	temp.SetReal(real+X.GetReal());
	temp.SetImaginary(imaginary+X.GetImaginary());
	return temp;
}




Complex Complex::operator - (Complex X)
{
	Complex temp;
	temp.SetReal(real-X.GetReal());
	temp.SetImaginary(imaginary-X.GetImaginary());
	return temp;
}


Complex Complex::operator * (Complex X)
{
	Complex temp;
	double a,b,c,d;
    a=real;
	b=imaginary;
	c=X.GetReal();
	d=X.GetImaginary();
	temp.SetReal(a*c-b*d);
	temp.SetImaginary(a*d+b*c);
	return temp;
}



Complex Complex::operator / (Complex X)
{
	Complex temp;
	double a,b,c,d;
	a=real;
	b=imaginary;
	c=X.GetReal();
	d=X.GetImaginary();
	
		temp.SetReal((a*c+b*d)/(c*c+d*d));
		temp.SetImaginary((b*c-a*d)/(c*c+d*d));
	
	return temp;
}



Complex Complex::operator ^ (int n)
{
	if(n<0)
	{
		Complex temp=*this;
		Complex X(1,0);
       for(int i=0;i<-n-1;i++)
		{
			temp=temp*(*this);
		}
	
		return X/temp;
	} 


     

	 else   
	 {
		 if(n==0)
		 {   
			 Complex temp(1,0);
		      return temp;
		 }
       else

	   {
		 Complex temp=*this;
		 for(int i=0;i<n-1;i++)
		{
			temp=temp*(*this);
		}
		return temp;
	}
	
	 }
	
}

bool Complex::operator == (Complex X)
{
	return (real==X.GetReal() && imaginary==X.GetImaginary());
}

bool Complex::operator != (Complex X)
{
	return (real!=X.GetReal() || imaginary!=X.GetImaginary());
}

Complex::~Complex(void)
{
	
}

void main()
{

	Complex a(3,7),b(-4,-9),c(-2,5);
	Complex d;

	printf("a=");
	a.Show();
	printf("b=");
	b.Show();
	printf("c=");
	c.Show();
	printf("d=");
	d.Show();
	printf("\n");

	printf("复数a的模=%.4f\n",a.GetAbs());
	printf("复数a的主幅角(弧度)=%.4f\n",a.GetAzimuth());
	printf("复数b的模=%.4f\n",b.GetAbs());
	printf("复数b的主幅角(弧度)=%.4f\n",b.GetAzimuth());
    printf("复数c的模=%.4f\n",c.GetAbs());
	printf("复数c的主幅角(弧度)=%.4f\n",c.GetAzimuth());

	printf("\n");
	d=a+b;
	printf("a+b=");
	d.Show();
	
	d=a-b;
	printf("a-b=");
	d.Show();

	d=a*b;
	printf("a*b=");
	d.Show();

	d=a/b;
	printf("a/b=");
	d.Show();

	d=a^(0);
	printf("a^(0)=");
	d.Show();
    
    d=a^(-3);
	printf("a^(-3)=");
	d.Show();  

	d=b^4;
	printf("b^(4)=");
	d.Show();
    
	printf("\n");
	if(a==b)
	{
		printf("a==b\n");
	}

	if(a!=b)
	{
		printf("a!=b\n");
	}
    
	c.Reset(3,7);
	if(a==c)
	{
		printf("a==c\n");
	}
	
	if(a!=c)
	{
		printf("a!=c\n");
	}
   
	
    printf("\n");
	//重新置复数a的实部,虚部
	a.SetReal(4.7);
	a.SetImaginary(7.5);
	printf("重置复数a后的的值为:\n");
	a.Show();
	

	a.Reset(5,5.4);
	a.Show();

	return;
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -