c++的分数运算符重载,具体看代码,来自百度知道
#include<iostream>
using namespace std;
int fn(int a,int b);
class fraction//分数类声明
{
public://外部接口
fraction(int FZ=0,int FM=0)//构造函数
{ fz=FZ ; fm=FM ; }
friend fraction operator + ( fraction c1, fraction c2)//运算符 + 重载成员函数
{return fraction(c1.fz*c2.fm+c2.fz*c1.fm,c1.fm*c2.fm);}
friend fraction operator - ( fraction c1, fraction c2)//运算符 - 重载成员函数
{return fraction(c1.fz*c2.fm-c2.fz*c1.fm,c1.fm*c2.fm);}
friend fraction operator * ( fraction c1, fraction c2)//运算符 * 重载成员函数
{return fraction(c1.fz*c2.fz,c1.fm*c2.fm);}
friend fraction operator / ( fraction c1, fraction c2)//运算符 / 重载成员函数
{return fraction(c1.fz*c2.fm,c1.fm*c2.fz);}
void input();//输入分数
void output();//输出分数
private://私有数据成员
int fz;//分子
int fm;//分母
};
void fraction::input()//输入函数类外实现
{
cout<<"请输入复数的分子和分母:";
cin>>fz>>fm;
}
void fraction::output()//输出函数类外实现
{
int c;
c=fn(fz,fm);
if(c==0){
cout<<"("<<0<<")"<<endl ;
}
else{
fz/=c;fm/=c;
if(fz==fm){
cout<<"("<<fz<<")"<<endl;
}
else
cout<<"( "<<fz<<"/"<<fm<<" )"<<endl;
}
}
int fn(int a,int b)//求分子分母的公约数
{
int d;
for(d=(a<b?a:b);d>=1;d--)
if(a%d==0&&b%d==0)
{ break; }
return d;
}
int main()
{
fraction c1,c2,c3;
c1.input(); c2.input();
cout<<"输入的两个分数为:"<<endl;
cout<<"c1="; c1.output();
cout<<"c2="; c2.output();
cout<<"两个分数之间能进行所有运算有:"<<endl;
c3=c1+c2;
cout<<"c3=c1+c2="; c3.output();
c3=c1-c2;
cout<<"c3=c1-c2="; c3.output();
c3=c1*c2;
cout<<"c3=c1*c2="; c3.output();
c3=c1/c2;
cout<<"c3=c1/c2="; c3.output();
}