分数运算符的重载

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();

}

猜你喜欢

转载自blog.csdn.net/qq_42744797/article/details/84928224