用MFC制作 复数类的四则运算 急用

 我来答
juetforwork
2012-05-07 · 超过19用户采纳过TA的回答
知道答主
回答量:60
采纳率:0%
帮助的人:54.6万
展开全部
支持虚数与虚数之间,虚数与各种类型数之间直接加减乘除,让算虚数就像算普通类型int数据一样方便
show用于显示虚数,直接看
Plural就相当于int类型的虚数类型
double RealPart; //实部
double ImaginaryPart;//虚部
具体用法参见main
已通过编译

#include "windows.h"
#include "stdio.h"
#include "iostream.h"

//虚数算法
struct Plural{
double RealPart; //实部
double ImaginaryPart;//虚部

//////////问题:超过两次的运算统统无效////////////////
////////////////虚数与虚数计算///////////////////////

Plural operator+(Plural &s) //重载“+”,函数直接写在结构体内!
{
Plural c;
c.RealPart=RealPart+s.RealPart;
c.ImaginaryPart=ImaginaryPart+s.ImaginaryPart;
return c;
}

Plural operator-(Plural &s) //重载“-”,函数直接写在结构体内!
{
Plural c;
c.RealPart=RealPart-s.RealPart;
c.ImaginaryPart=ImaginaryPart-s.ImaginaryPart;
return c;
}

Plural operator*(Plural &s) //重载“*”,函数直接写在结构体内!
{
Plural c;
c.RealPart=RealPart*s.RealPart-ImaginaryPart*s.ImaginaryPart;
c.ImaginaryPart=RealPart*s.ImaginaryPart+ImaginaryPart*s.RealPart;
return c;
}

Plural operator/(Plural &s) //重载“*”,函数直接写在结构体内! (a+bj)/(c+dj)=(a+bj)*(c-dj)/(c+dj)*(c-dj);
{
Plural c;
UINT Dividend;

Dividend=s.RealPart*s.RealPart+s.ImaginaryPart*s.ImaginaryPart;

c=s;
c.ImaginaryPart=0-c.ImaginaryPart;

c=c*(*this); //(a+bj)*(c-dj)

c.RealPart=c.RealPart/Dividend;
c.ImaginaryPart=c.ImaginaryPart/Dividend;

return c;
}
//////////////////////////////////////////////
//////////虚数与double浮点型数据///////////////////
friend Plural operator+(Plural &s,const double& date);//Plural+double
friend Plural operator+(const double& date,Plural &s);//double+Plural

friend Plural operator-(Plural &s,const double& date);//double-Plural
friend Plural operator-(const double& date,Plural &s);//Plural-double

friend Plural operator*(Plural &s,const double& date);// Plural*double
friend Plural operator*(const double& date,Plural &s);// double*Plural

friend Plural operator/(Plural &s,const double& date);// Plural/double
friend Plural operator/(const double& date,Plural &s);// double/Plural

//////////虚数与float浮点型数据///////////////////
friend Plural operator+(Plural &s,const float& date);//Plural+float
friend Plural operator+(const float& date,Plural &s);//float+Plural

friend Plural operator-(Plural &s,const float& date);//float-Plural
friend Plural operator-(const float& date,Plural &s);//Plural-float

friend Plural operator*(Plural &s,const float& date);// Plural*float
friend Plural operator*(const float& date,Plural &s);// float*Plural

friend Plural operator/(Plural &s,const float& date);// Plural/float
friend Plural operator/(const float& date,Plural &s);// float/Plural
//////////////////////////////////////////////////////
//////////虚数与int浮点型数据///////////////////
friend Plural operator+(Plural &s,const int& date);//Plural+int
friend Plural operator+(const int& date,Plural &s);//int+Plural

friend Plural operator-(Plural &s,const int& date);//int-Plural
friend Plural operator-(const int& date,Plural &s);//Plural-int

friend Plural operator*(Plural &s,const int& date);// Plural*int
friend Plural operator*(const int& date,Plural &s);// int*Plural

friend Plural operator/(Plural &s,const int& date);// Plural/int
friend Plural operator/(const int& date,Plural &s);// int/Plural

};

Plural operator+(Plural& s,const double& date)
{
Plural c=s;
c.RealPart+=date;
return c;
}
Plural operator+(const double& date,Plural& s)
{
Plural c=s;
c.RealPart+=date;
return c;
}

Plural operator-(Plural& s,const double& date)
{
Plural c=s;
c.RealPart-=date;
return c;
}
Plural operator-(const double& date,Plural& s)
{
Plural c=s;
c.RealPart=date-c.RealPart;
return c;
}

Plural operator*(Plural& s,const double& date)
{
Plural c=s;
c.RealPart*=date;
c.ImaginaryPart*=date;
return c;
}
Plural operator*(const double& date,Plural& s)
{
Plural c=s;
c.RealPart*=date;
c.ImaginaryPart*=date;
return c;
}

Plural operator/(Plural& s,const double& date)
{
Plural c=s;
c.RealPart/=date;
c.ImaginaryPart/=date;
return c;
}

Plural operator/(const double& date,Plural& s)// a/(b+cj)=a(b-cj)/b^2+c^2
{
double Dividend;
Plural c=s;
Dividend=c.RealPart*c.RealPart+c.ImaginaryPart*c.ImaginaryPart;
c.ImaginaryPart=0-c.ImaginaryPart;
c=c*date;
c.ImaginaryPart/=Dividend;
c.RealPart/=Dividend;
return c;
}

/////////////////float类型////////////////////////

Plural operator+(Plural& s,const float& date)
{
Plural c=s;
c.RealPart+=date;
return c;
}
Plural operator+(const float& date,Plural& s)
{
Plural c=s;
c.RealPart+=date;
return c;
}

Plural operator-(Plural& s,const float& date)
{
Plural c=s;
c.RealPart-=date;
return c;
}
Plural operator-(const float& date,Plural& s)
{
Plural c=s;
c.RealPart=date-c.RealPart;
return c;
}

Plural operator*(Plural& s,const float& date)
{
Plural c=s;
c.RealPart*=date;
c.ImaginaryPart*=date;
return c;
}
Plural operator*(const float& date,Plural& s)
{
Plural c=s;
c.RealPart*=date;
c.ImaginaryPart*=date;
return c;
}

Plural operator/(Plural& s,const float& date)
{
Plural c=s;
c.RealPart/=date;
c.ImaginaryPart/=date;
return c;
}

Plural operator/(const float& date,Plural& s)// a/(b+cj)=a(b-cj)/b^2+c^2
{
double Dividend;
Plural c=s;
Dividend=c.RealPart*c.RealPart+c.ImaginaryPart*c.ImaginaryPart;
c.ImaginaryPart=0-c.ImaginaryPart;
c=c*date;
c.ImaginaryPart/=Dividend;
c.RealPart/=Dividend;
return c;
}
///////////////////////////////////////////////////////////////////////////

/////////////////int类型////////////////////////

Plural operator+(Plural& s,const int& date)
{
Plural c=s;
c.RealPart+=date;
return c;
}
Plural operator+(const int& date,Plural& s)
{
Plural c=s;
c.RealPart+=date;
return c;
}

Plural operator-(Plural& s,const int& date)
{
Plural c=s;
c.RealPart-=date;
return c;
}
Plural operator-(const int& date,Plural& s)
{
Plural c=s;
c.RealPart=date-c.RealPart;
return c;
}

Plural operator*(Plural& s,const int& date)
{
Plural c=s;
c.RealPart*=date;
c.ImaginaryPart*=date;
return c;
}
Plural operator*(const int& date,Plural& s)
{
Plural c=s;
c.RealPart*=date;
c.ImaginaryPart*=date;
return c;
}

Plural operator/(Plural& s,const int& date)
{
Plural c=s;
c.RealPart/=date;
c.ImaginaryPart/=date;
return c;
}

Plural operator/(const int& date,Plural& s)// a/(b+cj)=a(b-cj)/b^2+c^2
{
double Dividend;
Plural c=s;
Dividend=c.RealPart*c.RealPart+c.ImaginaryPart*c.ImaginaryPart;
c.ImaginaryPart=0-c.ImaginaryPart;
c=c*date;
c.ImaginaryPart/=Dividend;
c.RealPart/=Dividend;
return c;
}
///////////////////////////////////////////////////////////////////////////
double AbsoluteValue(Plural& s)
{
return s.RealPart*s.RealPart+s.ImaginaryPart*s.ImaginaryPart;
}

void show(Plural& b)
{
if(b.ImaginaryPart>=0)
cout<<b.RealPart<<"+"<<b.ImaginaryPart<<"j"<<endl;
else
cout<<b.RealPart<<b.ImaginaryPart<<"j"<<endl;
}

void main()
{
float fl=1.002;
Plural a,b;//虚数a,b
a.RealPart=1;//虚数a实部a=1+2j
b.RealPart=1;
a.ImaginaryPart=2;//虚数a虚部
b.ImaginaryPart=2;//b=1+2j
show(a);//显示虚数a
show(b);

b=a-b;//虚数减法
show(b);

b=b+1.002;//虚数加法
show(b);

b=b/fl+2.88;
show(b);//除法加与实数相加

a=a+b;
show(a);//显示虚数a

a=a*b;
show(a);
system("pause");
}
昭君出九州春l
2012-05-07 · 贡献了超过196个回答
知道答主
回答量:196
采纳率:0%
帮助的人:47万
展开全部
利用运算符的重载
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式