设计一个分数类,其数据成员包括分子分母,分别用友元和成员函数两种方式实现分数对象的加、减运算。
时间: 2024-02-03 17:11:37 浏览: 143
下面是一个分数类的实现,其中包括了分子分母两个数据成员和加减运算的友元函数和成员函数的实现:
```cpp
#include <iostream>
using namespace std;
class Fraction {
public:
Fraction(int n = 0, int d = 1) : numerator(n), denominator(d) {}
friend Fraction operator+(const Fraction& f1, const Fraction& f2);
friend Fraction operator-(const Fraction& f1, const Fraction& f2);
Fraction operator+=(const Fraction& f);
Fraction operator-=(const Fraction& f);
void print() const;
private:
int numerator; // 分子
int denominator; // 分母
};
Fraction operator+(const Fraction& f1, const Fraction& f2) {
int num = f1.numerator * f2.denominator + f2.numerator * f1.denominator;
int den = f1.denominator * f2.denominator;
return Fraction(num, den);
}
Fraction operator-(const Fraction& f1, const Fraction& f2) {
int num = f1.numerator * f2.denominator - f2.numerator * f1.denominator;
int den = f1.denominator * f2.denominator;
return Fraction(num, den);
}
Fraction Fraction::operator+=(const Fraction& f) {
numerator = numerator * f.denominator + f.numerator * denominator;
denominator *= f.denominator;
return *this;
}
Fraction Fraction::operator-=(const Fraction& f) {
numerator = numerator * f.denominator - f.numerator * denominator;
denominator *= f.denominator;
return *this;
}
void Fraction::print() const {
cout << numerator << "/" << denominator << endl;
}
int main() {
Fraction f1(1, 2);
Fraction f2(3, 4);
Fraction f3 = f1 + f2;
f3.print(); // 输出 5/4
Fraction f4 = f1 - f2;
f4.print(); // 输出 -1/4
f1 += f2;
f1.print(); // 输出 5/4
f2 -= f1;
f2.print(); // 输出 -1/4
return 0;
}
```
上面的实现中,重载运算符`+`和`-`作为友元函数实现,而重载运算符`+=`和`-=`作为成员函数实现。在`+=`和`-=`中,先计算出新的分子和分母,然后修改当前对象的分子和分母,并返回修改后的对象。最后在`main()`函数中测试了这些运算的功能。
阅读全文