c++中自减(后置)运算符重载代码

发布时间:2024-05-19 19:16 发布:上海旅游网

问题描述:

/Lab14.cpp 运算符重载
#include <iostream.h>
#include <stdlib.h>
class Franc
{
private:
int nume;
int deno;
public:
Franc() {}
Franc(int nu,int de);
void display();
void FranSimp();
Franc operator+(Franc f); //重载运算符"+"
Franc operator-(Franc f); //重载运算符"-"
bool operator==(Franc f); //重载运算符"=="
Franc operator++(); //重载前置运算符"++"
Franc operator--(int); //重载前置运算符"--"
};
Franc::Franc(int nu,int de)
{ if(de==0)
{ cerr<<"除数为零!"<<endl;
exit(0); //终止程序运行
}
nume=nu;
deno=de;
}
void Franc::display() //输出分数
{ cout<<"("<<nume<<"/"<<deno<<")"<<endl;
}
void Franc::FranSimp() //化简为最简分数
{
int m,n,r;
m=nume; //分数的分子和分母的最大公约数
n=deno;
r=m%n;
while(r!=0)
{ m=n;
n=r;
r=m%n;
}
if(n!=0) //化简为最简分式
{ nume/=n;
deno/=n;
}
if(deno<0) //分母为负时处理
{
nume=-nume;
deno=-deno;
}
}
Franc Franc::operator+(Franc f)
{
Franc temp;
temp.nume=nume*f.deno+f.nume*deno; //计算结果分数的分子
temp.deno=deno*f.deno; //计算结果分数的分母
temp.FranSimp(); //对结果进行简化处理----化简的是调用函数的对象分数,而非temp
return Franc(temp.nume,temp.deno); //返回结果分数
}
Franc Franc::operator-(Franc f)
{
Franc temp;
temp.nume=nume*f.deno-f.nume*deno; //计算结果分数的分子
temp.deno=deno*f.deno; //计算结果分数的分母
temp.FranSimp(); //对结果进行简化处理
return Franc(temp.nume,temp.deno); //返回结果分数

}
bool Franc::operator==(Franc f)
{
if(nume*f.deno==f.nume*deno)
return true;
else
return false;
}
Franc Franc::operator++() //先增1,然后返回它的引用
{
nume+=deno;
return Franc(nume,deno);//返回结果分数
}
Franc Franc::operator--(int) //
{
Franc temp;
temp.nume=nume; //保存当前分数的分子
temp.deno=deno; //保存当前分数的分母
nume-=deno;
temp.FranSimp();//对结果进行简化处理
FranSimp();
return Franc(temp.nume,temp.deno);
}
void main()
{
Franc f1(5,6),f2(10,-20),f3; //定义分数类对象
cout<<"f1=";
f1.display();
f2.FranSimp();
cout<<"f2=";
f2.display();
if(f1==f2)
cout<<"两数相等!"<<endl;
else
cout<<"两数不相等!"<<endl;
f3=f1+f2; //用重载运算符实现分数加法
cout<<"f1+f2=";
f3.display();
f3=f1-f2;
cout<<"f1-f2=";
f3.display();
++f2;
cout<<"++f2=";
f2.display();
f3=f2--;
cout<<"f2--=";
f3.display();
cout<<"f2=";
f2.display();
Franc f4(10,0);
}

运行后,f2--的结果和--后的f2均错,找不到问题所在
跪求高手解答
注释中有几处写错了,粗看就好。。

问题解答:

c++中自减(后置)运算符重载代码这个旅游问答期待您的解答,请登录账号或关注微信公众号回答这个问题。

热点新闻