您的位置:首页 > 编程语言 > C语言/C++

C++ 设计一个分数类fration,其中包含以下功能:能防止分母为0的构造函数; 对非最简分数进行约分的成员函数;加、减、乘、除运算符重载函数(用友元函数实现); 关系运算符、赋值运算符、流

2020-07-16 05:01 591 查看

设计一个分数类fration:
#include
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;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐