分数类,包含加法运算符重载
创建了分数类,构造函数包含了合法性检验和化简功能
重载了该类的加法运算符
#include<iostream>
using namespace std;
class RationalNumber
{
public:
friend RationalNumber& operator+(RationalNumber R1, RationalNumber R2)
{
RationalNumber RR((R1.numerator * R2.denominator + R2.numerator * R1.denominator), (R1.denominator * R2.denominator));
return RR;
}
RationalNumber(int num, int den)
{
if (legality(num, den))
{
numerator = num;
denominator = den;
}
else { cout << "error"; }
simplification(numerator, denominator);
}
void get() { cout << numerator << '/' << denominator << '\n'; }
private:
int numerator;//分子
int denominator;//分母
//化简函数
void simplification(int& a, int& b)
{
int t = 1;
if (a < 0)
{
a = -a;
t = -t;
}
if (a <= b)
{
for (int x = a; x >= 2; x--)
{
if (a % x == 0 && b % x == 0)
{
a /= x;
b /= x;
break;
}
}
}
if (a > b)
{
for (int x = b; x >= 2; x--)
{
if (a % x == 0 && b % x == 0)
{
a /= x;
b /= x;
break;
}
}
}
a *= t;
}
//合法检验函数
//合法要求为分子分母均不为0,分母不可小于0
bool legality(int a, int b)
{
if (a * b == 0)return 0;
if (b < 0)return 0;
return 1;
}
};
int main()
{
int a, b, c, d;
cin >> a >> b >> c >> d;
RationalNumber A1(a, b);
RationalNumber A2(c, d);
cout << "first:"; A1.get(); cout << endl;
cout << "second:"; A2.get(); cout << endl << endl;
RationalNumber AA(1,1);
AA = A1 + A2;
cout << "sum:";
AA.get();
cout << endl;
}
输入实例:
功能并不完全只是初次编写运算符重载进行相应的展示。
(和为0即会输出error)
有可提升和改进的地方请指教!!!