我给你加了类complex的定义,可以直接运行
#include<iostream>
using namespace std;
class complex
{
public:
void show();
complex(int a=0,int b=0)
{
R=a;
I=b;
}
complex add(complex);
private:
int R;
int I;
};
complex complex::add(complex s)//////////////////////////add函数
{
R+=sR;
I+=sI;
return complex(R,I);
}
void complex::show()
{
if(I>0)
cout<<R<<"+"<<I<<"i"<<endl;
else if (I==0)
cout<<R<<endl;
else
cout<<R<<"-"<<I<<"i"<<endl;
}//这个只是show函数,类里面的私有数据成员就是 R 和 I 。
int main(int argc, char argv[])
{
complex a (3,4);
complex b (5,6);
complex c;
c=aadd(b); //c=a+b 我问的关键就是在这个位置,这个aadd(b)实现加法,并且能用等号给c赋值
cshow();
return 0;
}
1、加法法则
复数的加法按照以下规定的法则进行:设z1=a+bi,z2=c+di是任意两个复数,
则它们的和是 (a+bi)+(c+di)=(a+c)+(b+d)i。
两个复数的和依然是复数,它的实部是原来两个复数实部的和,它的虚部是原来两个虚部的和。
2、减法法则
复数的减法按照以下规定的法则进行:设z1=a+bi,z2=c+di是任意两个复数,
则它们的差是 (a+bi)-(c+di)=(a-c)+(b-d)i。
两个复数的差依然是复数,它的实部是原来两个复数实部的差,它的虚部是原来两个虚部的差。
3、乘法法则
规定复数的乘法按照以下的法则进行:
设z1=a+bi,z2=c+di(a、b、c、d∈R)是任意两个复数,那么它们的积(a+bi)(c+di)=(ac-bd)+(bc+ad)i。
其实就是把两个复数相乘,类似两个多项式相乘,展开得: ac+adi+bci+bdi2,因为i2=-1,所以结果是(ac-bd)+(bc+ad)i 。两个复数的积仍然是一个复数。
4、除法法则
复数除法定义:满足(c+di)(x+yi)=(a+bi)的复数x+yi(x,y∈R)叫复数a+bi除以复数c+di的商。
运算方法:可以把除法换算成乘法做,在分子分母同时乘上分母的共轭。所谓共轭你可以理解为加减号的变换,互为共轭的两个复数相乘是个实常数。
扩展资料
复数的加法就是自变量对应的平面整体平移,复数的乘法就是平面整体旋转和伸缩,旋转量和放大缩小量恰好是这个复数对应向量的夹角和长度。
二维平移和缩放是一维左右平移伸缩的扩展,旋转是一个至少要二维才能明显的特征,限制在一维上,只剩下旋转0度或者旋转180度,对应于一维导数正负值(小线段是否反向)。
参考资料来源:百度百科-复数运算法则
#include<iostream>
using namespace std;
/
1同一个运算符可以代表多个不同的功能,编译系统是根据 *** 作的数据来判别该执行具体哪一个功能的
/
class complex
{
public:
complex(){ real = 0; imag = 0; } //有参和无参的构造函数
complex(double r, double i){ real = r; imag = i; }
//当运算符重载为类的成员函数时的时候,函数的参数的个数要比原来的 *** 作数少一个(后置“++”、“-”除外),因为成员函数都是通过该类的某个对象来访问的,成员函数中有一隐含的参数this指针,this指针
//指向当前的对象,而当前的对象本身就是其中的一个 *** 作数。
//当运算符重载为友元函数的时候,参数的个数与原来的 *** 作数目是一样的
complex operator+(complex &c2);//运算符的重载。因为本身的‘+’只能是对基本类型数据进行 *** 作,现在想要对复数类也进行 *** 作。那么必须要重载,重新定义其为我们需要的功能
complex operator-(complex &c2);
complex operator(complex &c2);
complex operator/(complex &c2);
complex operator+(int &i);
complex operator-(int &i);
complex operator(int &i);
complex operator/(int &i);
void display();
private:
double real;
double imag;
};
//不明白为什么这里的return不能像后面复数与整数相加时的return
//解答:还不都是一样的,只不过是因为前面涉及到了实部和虚部 *** 作,因此重新构造一个复数类的对象会使程序更加明了。
//后面只是用到了实部,因此不需要浪费内存空间,重新申请一个新的复数类的对象(乘除除外)。程序简化为直接创建一个临时的无名对象作为返回值,程序的运行效率更高
//复数和复数的 *** 作运算
complex complex::operator+(complex &c2)
{
complex c;
creal = real + c2real;
cimag = imag + c2imag;
return c;
}
complex complex::operator-(complex &c2)
{
complex c;
creal = real - c2real;
cimag = imag - c2imag;
return c;
}
complex complex::operator (complex &c2)
{
complex c;
creal = realc2real - imagc2imag;
cimag = imagc2real + realc2imag;
return c;
}
complex complex::operator / (complex &c2)
{
complex c;
creal = (realc2real + imagc2imag) / (c2realc2real + c2imagc2imag);
cimag = (imagc2real - realc2imag) / (c2realc2real + c2imagc2imag);
return c;
}
//复数与整数之间的 *** 作
complex complex::operator +(int &i)
{
return complex(real + i, imag);
}
complex complex::operator -(int &i)
{
return complex(real - i, imag);
}
complex complex::operator (int &i)
{
return complex(reali, imagi);
}
complex complex::operator /(int &i)
{
return complex(real / i, imag / i);
}
void complex::display()
{
cout << "(" << real << "," << imag << "i)" << endl;
}
int main()
{
complex c1(1, 2), c2(3, 4), c3;
int i = 5;
cout << "c1=";
c1display();
cout << "c2=";
c2display();
c3 = c1 + c2;
cout << "c1+c2=";
c3display();
c3 = c1 - c2;
cout << "c1-c2=";
c3display();
c3 = c1c2;
cout << "c1c2=";
c3display();
c3 = c1 / c2;
cout << "c1/c2=";
c3display();
cout << "i=" << i << endl;
c3 = c1 + i;
cout << "c1+i=";
c3display();
c3 = c1 - i;
cout << "c1-i=";
c3display();
c3 = c1i;
cout << "c1i=";
c3display();
c3 = c1 / i;
cout << "c1/i=";
c3display();
return 0;
以上就是关于定义一个复数类 可以两者求加法(只要加法) C++ 不使用重载全部的内容,包括:定义一个复数类 可以两者求加法(只要加法) C++ 不使用重载、复数的运算公式大全、使用C++定义一个复数类 complex,用成员函数方式定义复数类对象的加减运算等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)