设计一个分数类fration:
#include<iostream>
using namespace std;
class fraction { //定义分数
int numerator;//分子
int denominator;//分母
public:
fraction(int x = 0, int y = 1);//默认分子为0,分母为1,函数体中必须有控制分母不为0的条件
fraction(const fraction& f);
int max_divisor();//求分子分母的最大公约数
friend fraction operator+(const fraction& f1, const fraction& f2);
friend fraction operator-(const fraction f1, const fraction& f2);
friend fraction operator*(const fraction& f1, const fraction& f2);
friend fraction operator/(const fraction& f1, const fraction& f2);
friend bool operator>=(const fraction& f1, const fraction& f2);
friend ostream& operator<<(ostream& os, const fraction& f);
friend istream& operator>>(istream& is, fraction& f);
};
fraction::fraction(int x, int y)
{
numerator = x;
denominator = y;
}
fraction::fraction(const fraction& f)
{
numerator = f.numerator;
denominator = f.denominator;
}
int fraction::max_divisor()
{
int m, n,r;
m=numerator;n= denominator;
do
{
r = m % n;
m = n;
n = r;
} while (r != 0);
return m;
}
fraction operator+(const fraction& f1, const fraction& f2)
{
fraction t;
int g;
t.numerator = f1.numerator * f2.denominator + f1.denominator * f2.numerator;
t.denominator = f1.denominator * f2.denominator;
g = t.max_divisor();
t.numerator = t.numerator / g;
t.denominator = t.denominator / g;
return t;
}
fraction operator-(const fraction f1, const fraction& f2)
{
fraction t;
int g;
t.numerator = f1.numerator * f2.denominator - f1.denominator * f2.numerator;
t.denominator = f1.denominator * f2.denominator;
g = t.max_divisor();
t.numerator = t.numerator / g;
t.denominator = t.denominator / g;
return t;
}
fraction operator*(const fraction& f1, const fraction& f2)
{
fraction t;
int g;
t.numerator = f1.numerator * f2.numerator;
t.denominator = f1.denominator * f2.denominator;
g = t.max_divisor();
t.numerator = t.numerator / g;
t.denominator = t.denominator / g;
return t;
}
fraction operator/(const fraction& f1, const fraction& f2)
{
fraction t;
int g;
t.numerator = f1.numerator * f2.denominator;
t.denominator = f1.denominator * f2.numerator;
g = t.max_divisor();
t.numerator = t.numerator / g;
t.denominator = t.denominator / g;
return t;
}
bool operator>=(const fraction& f1, const fraction& f2)
{
if (f1.denominator * f2.denominator > 0)
{
if (f1.numerator * f2.denominator < f1.denominator * f2.numerator)
return false;
else
return true;
}
if (f1.denominator * f2.denominator < 0)
{
if (f1.numerator * f2.denominator > f1.denominator * f2.numerator)
return false;
else
return true;
}
if (f1.denominator * f2.denominator == 0)
cout << "错误";
}
ostream& operator<<(ostream& os, const fraction& f)
{
os << f.numerator << "/" << f.denominator << endl;
return os; // TODO: 在此处插入 return 语句
}
istream& operator>>(istream& is, fraction& f)
{
cout << "分子:";
is >> f.numerator;
cout << "分母:";
is >> f.denominator; // TODO: 在此处插入 return 语句
return is;
}
int main()
{
fraction f1(1, 3);
fraction f2(1, 5);
/* cout << "请输入分数f2:" << endl;
cin >> f2;*/
cout << "f1 - f2=" << f1 - f2 << endl;
cout << "f1 + f2=" << f1 + f2 << endl;
cout << "f1 * f2=" << f1 * f2 << endl;
cout << "f1 / f2=" << f1 / f2 << endl;
cout << "f1>=f2 ? " << (f1 >= f2);
return 0;
}