使用友元函数重载分数的加减乘除运算。
时间: 2024-04-17 08:26:57 浏览: 80
友元函数可以访问类的私有成员,因此可以在友元函数中重载分数的加减乘除运算符。假设有一个名为Fraction的类表示分数,可以这样实现:
```cpp
class Fraction {
private:
int numerator; // 分子
int denominator; // 分母
public:
Fraction(int num, int denom) : numerator(num), denominator(denom) {}
// 声明友元函数
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);
};
// 定义友元函数
Fraction operator+(const Fraction& f1, const Fraction& f2) {
int num = f1.numerator * f2.denominator + f2.numerator * f1.denominator;
int denom = f1.denominator * f2.denominator;
return Fraction(num, denom);
}
Fraction operator-(const Fraction& f1, const Fraction& f2) {
int num = f1.numerator * f2.denominator - f2.numerator * f1.denominator;
int denom = f1.denominator * f2.denominator;
return Fraction(num, denom);
}
Fraction operator*(const Fraction& f1, const Fraction& f2) {
int num = f1.numerator * f2.numerator;
int denom = f1.denominator * f2.denominator;
return Fraction(num, denom);
}
Fraction operator/(const Fraction& f1, const Fraction& f2) {
int num = f1.numerator * f2.denominator;
int denom = f1.denominator * f2.numerator;
return Fraction(num, denom);
}
```
在上述代码中,我们定义了一个名为Fraction的类,包含私有成员变量numerator和denominator,分别表示分子和分母。然后,我们声明了四个友元函数,分别重载了加、减、乘、除运算符。每个友元函数都可以直接访问Fraction类的私有成员。在每个友元函数的实现中,我们根据对应的运算规则计算出结果,并返回一个新的Fraction对象。
阅读全文