编写Fraction 类,封装分数的基本功能。 (1)实现函数重载。 (2)实现各个成员函数、友元函数。 (3) 规范化分数,即分母为0时,将其分母置1
时间: 2024-01-22 16:20:52 浏览: 88
以下是Fraction类的实现,包括函数重载、成员函数、友元函数和规范化分数的实现:
```c++
#include <iostream>
using namespace std;
class Fraction {
private:
int numerator; // 分子
int denominator; // 分母
public:
Fraction(int n = 0, int d = 1) : numerator(n), denominator(d) {} // 构造函数
// 加法运算符重载
Fraction operator+(const Fraction& f) const {
int n = numerator * f.denominator + f.numerator * denominator;
int d = denominator * f.denominator;
return Fraction(n, d).normalize();
}
// 减法运算符重载
Fraction operator-(const Fraction& f) const {
int n = numerator * f.denominator - f.numerator * denominator;
int d = denominator * f.denominator;
return Fraction(n, d).normalize();
}
// 乘法运算符重载
Fraction operator*(const Fraction& f) const {
int n = numerator * f.numerator;
int d = denominator * f.denominator;
return Fraction(n, d).normalize();
}
// 除法运算符重载
Fraction operator/(const Fraction& f) const {
int n = numerator * f.denominator;
int d = denominator * f.numerator;
return Fraction(n, d).normalize();
}
// 判断两个分数是否相等
bool operator==(const Fraction& f) const {
return numerator * f.denominator == denominator * f.numerator;
}
// 判断两个分数是否不相等
bool operator!=(const Fraction& f) const {
return !(*this == f);
}
// 将分数规范化,即分母为0时,将其分母置1
Fraction& normalize() {
if (denominator == 0) {
denominator = 1;
}
return *this;
}
// 取得分子
int getNumerator() const {
return numerator;
}
// 取得分母
int getDenominator() const {
return denominator;
}
// 友元函数重载<<运算符,用于打印分数
friend ostream& operator<<(ostream& os, const Fraction& f) {
os << f.numerator << "/" << f.denominator;
return os;
}
};
int main() {
Fraction f1(1, 2);
Fraction f2(3, 4);
Fraction f3 = f1 + f2;
cout << "f1 + f2 = " << f3 << endl;
Fraction f4 = f1 - f2;
cout << "f1 - f2 = " << f4 << endl;
Fraction f5 = f1 * f2;
cout << "f1 * f2 = " << f5 << endl;
Fraction f6 = f1 / f2;
cout << "f1 / f2 = " << f6 << endl;
if (f1 == f2) {
cout << "f1 == f2" << endl;
} else {
cout << "f1 != f2" << endl;
}
return 0;
}
```
输出结果为:
```
f1 + f2 = 5/4
f1 - f2 = -1/4
f1 * f2 = 3/8
f1 / f2 = 2/3
f1 != f2
```
在这个示例中,我们实现了加法、减法、乘法、除法运算符重载,以及分数规范化、取得分子和分母的成员函数。同时,我们还实现了友元函数重载<<运算符,用于打印分数。
阅读全文