第八周*【任务1】实现复数类中的运算符重载

本文详细介绍了如何在C++中实现复数类的运算符重载,包括加、减、乘、除操作。同时,阐述了复数的四则运算法则,如加法、乘法、除法的计算步骤,以及如何通过运算符重载简化复数操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*【任务1】实现复数类中的运算符重载
定义一个复数类重载运算符+、-、*、/,使之能用于复数的加减乘除。
(1)方案一:请用类的成员函数完成运算符的重载;*/
#include <iostream>

using namespace std;

class Complex
{
public:
	Complex(){real=0;imag=0;}
	Complex(double r,double i){real=r;imag=i;}
	Complex operator+(Complex &c2);
	Complex operator-(Complex &c2);
	Complex operator*(Complex &c2);
	Complex operator/(Complex &c2);
	void display();
private:
	double real;
	double imag;
};
//下面定义成员函数
Complex  Complex::operator+(Complex &c2)
{
	Complex c ;
	c.real=real+c2.real;
	c.imag=imag+c2.imag;
	return c ;
}
Complex  Complex::operator-(Complex &c2)
{
	Complex c ;
	c.real=real-c2.real;
	c.imag=imag-c2.imag;
	return c ;
}

Complex  Complex::operator*(Complex &c2)
{
	Complex c ;
	c.real=real*c2.real-imag*c2.imag;
	c.imag=imag*c2.real+real*c2.imag;
	return c ;
}

Complex  Complex::operator/(Complex &c2)//:复数除法公式:(a+bi)/(c+di)=(ac+bd)/(c^2+d^2) +(bc-ad)/(c^2+d^2)i  
{
	Complex c ;
	c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);
	c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);
	return c ;
}
void Complex::display()
{
	cout<<"("<<real<<","<<imag<<")"<<endl;
}

int main()
{
	Complex c1(3,4),c2(5,-10),c3;
	cout<<"c1=";
	c1.display();
	cout<<"c2=";
	c2.display();
	c3=c1+c2;
	cout<<"c1+c2=";
	c3.display();
	c3=c1-c2;
	cout<<"c1-c2=";
	c3.display();
	c3=c1*c2;
	cout<<"c1*c2=";
	c3.display();
	c3=c1/c2;
	cout<<"c1/c2=";
	c3.display();
	system("pause");
	return 0;
}

/*编辑本段复数的四则运算法则:
  若复数z1=a+bi,z2=c+di,其中a,b,c,d∈R,则   z1±z2=(a+bi)±(c+di)=(a±c)+(b±d)i,  
 (a+bi)·(c+di)=(ac-bd)+(bc+ad)i,   (a+bi)÷(c+di)=(ac+bd)/(c^2+d^2) +((bc-ad)/(c^2+d^2))i
  其实两复数相除,完全可以转化为两复数相乘:(a+bi)÷(c+di)=(a+bi)/(c+di),此时分子分母同时乘以分母
c+di的共轭复数c-di即可。
复数的加法乘法运算律:
  z1+z2=z2+z1   (z1+z2)+z3=z1+(z2+z3)   z1z2=z2z1   z1(z2z3)=(z1z2)z3   z1(z2+z3)=z1z2+z1z3
虚数单位i的乘方:
  i^(4n+1)=i,i^(4n+2)=-1,i^(4n+3)=-i,i^4n=1(其中n∈Z)   复数的加法法则 复数的加法按照以下规定的法则
进行:设z1=a+bi,z2=c+di是任意两个复数,   则它们的和是 (a+bi)+(c+di)=(a+c)+(b+d)i.   两个复数的和依然
是复数,它的实部是原来两个复数实部的和,它的虚部是原来两个虚部的和。   复数的加法满足交换律和结合律,  
 即对任意复数z1,z2,z3,有: z1+z2=z2+z1; (z1+z2)+z3=z1+(z2+z3).
编辑本段复数的乘法法则
  规定复数的乘法按照以下的法则进行:   设z1=a+bi,z2=c+di(a、b、c、d∈R)是任意两个复数,那么它们的积
(a+bi)(c+di)=(ac-bd)+(bc+ad)i.   其实就是把两个复数相乘,类似两个多项式相乘,在所得的结果中把i2换成-1
,并且把实部与虚部分别合并.两个复数的积仍然是一个复数.
编辑本段复数的除法法则
  复数除法定义:满足(c+di)(x+yi)=(a+bi)的复数x+yi(x,y∈R)叫复数a+bi除以复数c+di的商   运算方法:可以
把除法换算成乘法做,在分子分母同时乘上分母的共轭. 所谓共轭你可以理解为加减号的变换,互为共轭的两个复数相乘
是个实常数.   除法运算规则:   ①设复数a+bi(a,b∈R),除以c+di(c,d∈R),其商为x+yi(x,y∈R),   即
(a+bi)÷(c+di)=x+yi   ∵(x+yi)(c+di)=(cx-dy)+(dx+cy)i.   ∴(cx-dy)+(dx+cy)i=a+bi.   由复数相等定
义可知 cx-dy=a dx+cy=b   解这个方程组,得 x=(ac+bd)/(c^2+d^2) y=(bc-ad)/(c^2+d^2)   于是有:(a+bi)/(c+di)
=(ac+bd)/(c^2+d^2) +(bc-ad)/(c^2+d^2)i   ②利用(c+di)(c-di)=c^2+d^2.于是将 的分母有理化得:   原式= 
c^2-cdi+cdi-d^2×i^2   =c^2+d^2   ∴(a+bi)÷(c+di)= (ac+bd)/(c^2+d^2) +(bc-ad)/(c^2+d^2)i   点评:
①是常规方法,②是利用初中我们学习的化简无理分式时,都是采用的分母有理化思想方法,而复数c+di与复数c-di
,相当于我们初中学习的 的对偶式 ,它们之积为1是有理数,而(c+di)·(c-di)=c2+d2是正实数.所以可以分母实数
化. 把这种方法叫做分母实数化法*/


 

 

 

 

感言:貌似复数的计算公式给忘了啊,C++和数学真是密切啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值