c++中分别用成员函数和友元函数重载运算符,使对整型的运算符=、+、、* \适用于分数运算。 (1)输出结果是最简分数(可以是带分数) ; (2) 分母为1,只输出分子。
时间: 2024-02-27 14:54:08 浏览: 96
C++运算符重载 成员函数与友元函数详解
5星 · 资源好评率100%
好的,让我解释一下这个问题:
首先,我们需要定义一个分数类,其中包含分子和分母两个私有数据成员。然后,我们可以通过成员函数和友元函数重载运算符,实现对整型的运算符=、+、-、*、/ 适用于分数运算。
下面是一个简单的分数类的定义:
```c++
class Fraction {
private:
int numerator; // 分子
int denominator; // 分母
public:
Fraction(int num = 0, int den = 1) : numerator(num), denominator(den) {}
Fraction(const Fraction& f) : numerator(f.numerator), denominator(f.denominator) {}
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=(int num);
void print();
};
```
其中,重载的运算符包括:+、-、*、/、=。其中,+、-、*、/ 重载为友元函数,= 重载为成员函数。
下面是这些运算符的具体实现:
```c++
// 重载运算符+
Fraction operator+(const Fraction& f1, const Fraction& f2) {
int num = f1.numerator * f2.denominator + f1.denominator * f2.numerator;
int den = f1.denominator * f2.denominator;
return Fraction(num, den);
}
// 重载运算符-
Fraction operator-(const Fraction& f1, const Fraction& f2) {
int num = f1.numerator * f2.denominator - f1.denominator * f2.numerator;
int den = f1.denominator * f2.denominator;
return Fraction(num, den);
}
// 重载运算符*
Fraction operator*(const Fraction& f1, const Fraction& f2) {
int num = f1.numerator * f2.numerator;
int den = f1.denominator * f2.denominator;
return Fraction(num, den);
}
// 重载运算符/
Fraction operator/(const Fraction& f1, const Fraction& f2) {
int num = f1.numerator * f2.denominator;
int den = f1.denominator * f2.numerator;
return Fraction(num, den);
}
// 重载运算符=
Fraction Fraction::operator=(int num) {
numerator = num;
denominator = 1;
return *this;
}
// 输出分数
void Fraction::print() {
int gcd = std::__gcd(numerator, denominator);
int num = numerator / gcd;
int den = denominator / gcd;
if (den == 1) {
std::cout << num << std::endl;
} else if (num % den == 0) {
std::cout << num / den << std::endl;
} else {
int integer = num / den;
num = num % den;
if (integer == 0) {
std::cout << num << "/" << den << std::endl;
} else {
std::cout << integer << " " << num << "/" << den << std::endl;
}
}
}
```
其中,print() 函数用于输出分数,如果分数为最简分数,则直接输出分子;如果分数为带分数,则输出整数部分和分数部分。
这样,我们就可以使用这个分数类来进行分数运算了,例如:
```c++
Fraction f1(1, 2);
Fraction f2(3, 4);
Fraction f3 = f1 + f2;
f3.print(); // 输出结果为 5/4
Fraction f4 = f1 * 2;
f4.print(); // 输出结果为 1
```
希望这个例子能够帮助你理解如何在 C++ 中实现对整型的运算符=、+、-、*、/ 适用于分数运算。
阅读全文