14、设计一个完整的复数complex类,要求利用运算符重载实现复数的加法(+)、减法(-)、乘法(*)运算
3个回答
展开全部
这是我以前写的一个演示程序,正好适合,你给你吧。
我对输出做了优化,更符合数学上的习惯。
/***********************************************************
* 复数类演示程序
* 陈宗权,2007/5
***********************************************************/
#include <iostream>
#include <cmath>
using namespace std;
class Complex{//定义复数类
double real;//实部
double image;//虚部
public:
Complex( double r=0.0,double i=0.0 )//构造
:real(r),image(i)//初始化列表
{}
Complex operator+( const Complex& cc )const//两个复数相加
{
return Complex(real+cc.real,image+cc.image);
}
Complex operator-( const Complex& cc )const//两个复数相减
{
return Complex(real-cc.real,image-cc.image);
}
Complex operator*( const Complex& cc )const//两个复数相加
{
double r=real*cc.real-image*cc.image;
double i=image*cc.real+real*cc.image;
return Complex(r,i);
}
//输出复数信息
friend ostream& operator<<(ostream&o, const Complex& c)
{
//实部非零输出实部
if( c.real!=0 ){
o << c.real;
}
if( c.image!=0 ){//虚部非零则输出虚部和i
if( c.image>0 && c.real!=0 )//如果虚部为正且实部非零则输出+号
o << '+';
if( c.image<0 )
o << '-';
if( abs(c.image)!=1 )
o << abs(c.image);
o << 'i';//输出虚部标识字符i
}
if( c.real==0&&c.image==0 )//整个复数为零输出零
o << 0;
return o;//返回输出流对象本身
}
};
int main()
{
Complex c1, c2(2), c3(3,1), c4(3,-4);
cout<<"c1="<<c1<<endl;
cout<<"c2="<<c2<<endl;
cout<<"c3="<<c3<<endl;
cout<<"c4="<<c4<<endl;
cout<<"c3+c4="<<c3+c4<<endl;
cout<<"c3-c4="<<c3-c4<<endl;
cout<<"c3*c4="<<c3*c4<<endl;
return 0;
}
我对输出做了优化,更符合数学上的习惯。
/***********************************************************
* 复数类演示程序
* 陈宗权,2007/5
***********************************************************/
#include <iostream>
#include <cmath>
using namespace std;
class Complex{//定义复数类
double real;//实部
double image;//虚部
public:
Complex( double r=0.0,double i=0.0 )//构造
:real(r),image(i)//初始化列表
{}
Complex operator+( const Complex& cc )const//两个复数相加
{
return Complex(real+cc.real,image+cc.image);
}
Complex operator-( const Complex& cc )const//两个复数相减
{
return Complex(real-cc.real,image-cc.image);
}
Complex operator*( const Complex& cc )const//两个复数相加
{
double r=real*cc.real-image*cc.image;
double i=image*cc.real+real*cc.image;
return Complex(r,i);
}
//输出复数信息
friend ostream& operator<<(ostream&o, const Complex& c)
{
//实部非零输出实部
if( c.real!=0 ){
o << c.real;
}
if( c.image!=0 ){//虚部非零则输出虚部和i
if( c.image>0 && c.real!=0 )//如果虚部为正且实部非零则输出+号
o << '+';
if( c.image<0 )
o << '-';
if( abs(c.image)!=1 )
o << abs(c.image);
o << 'i';//输出虚部标识字符i
}
if( c.real==0&&c.image==0 )//整个复数为零输出零
o << 0;
return o;//返回输出流对象本身
}
};
int main()
{
Complex c1, c2(2), c3(3,1), c4(3,-4);
cout<<"c1="<<c1<<endl;
cout<<"c2="<<c2<<endl;
cout<<"c3="<<c3<<endl;
cout<<"c4="<<c4<<endl;
cout<<"c3+c4="<<c3+c4<<endl;
cout<<"c3-c4="<<c3-c4<<endl;
cout<<"c3*c4="<<c3*c4<<endl;
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |