class Fraction { public: Fraction(); //缺省构造函数设置分子为0,分母为1 Fraction(int n); //只有1 个参数,设置分子为n,分母为1 Fraction(int n, int d); //设置分子为n,分母为d void setValue(int n, int d); //设置分子和分母 int getNum(); //获取分子值 int getDen(); //获取分母值 double getDoubleValue(); //获取分数对应的小数值 Fraction add(const Fraction & f2); //分数相加 Fraction operator*(const Fraction &f2); //分数相加 void output(); //按分数形式显示最简分数,按真分数或带分数形式输出,不要有多余的空格 friend ostream &operator<<(ostream &out, Fraction &f);//重载输出,分数形式显示最简分数,按真分数或带分数形式输出,不要有多余的空格 friend istream &operator>>(istream &in, Fraction &f); //输入重载 private: int num; //分子 int den; //分母 void normalize();//规范化 int gcd(); //求最大公约数 };
时间: 2024-01-08 07:04:44 浏览: 15
这是一个分数类的定义,其中包含了三种构造函数:缺省构造函数、只有一个参数的构造函数和两个参数的构造函数。还有一些成员函数,如设置分子和分母的函数、获取分子和分母的函数、获取分数对应的小数值的函数、分数相加的函数、重载输出的函数和输入重载的函数等。其中,分数相加的函数和重载输出的函数都使用了运算符重载来实现。此外,还有一些私有函数,如规范化函数和求最大公约数的函数。
相关问题
class Fraction { public: Fraction(); //缺省构造函数设置分子为0,分母为1 Fraction(int n); //只有1 个参数,设置分子为n,分母为1 Fraction(int n, int d); //设置分子为n,分母为d void setValue(int n, int d); //设置分子和分母 int getNum(); //获取分子值 int getDen(); //获取分母值 double getDoubleValue(); //获取分数对应的小数值 Fraction add(const Fraction & f2); //分数相加 Fraction operator*(const Fraction &f2); //分数相加 void output(); //按分数形式显示最简分数,按真分数或带分数形式输出,不要有多余的空格 friend ostream &operator<<(ostream &out, Fraction &f);//重载输出,分数形式显示最简分数,按真分数或带分数形式输出,不要有多余的空格 friend istream &operator>>(istream &in, Fraction &f); //输入重载 private: int num; //分子 int den; //分母 void normalize();//规范化 int gcd(); //求最大公约数 }; 补充wanzheng
以下是补充完整的代码:
#include <iostream>
#include <cmath>
using namespace std;
class Fraction {
public:
Fraction(); //缺省构造函数设置分子为0,分母为1
Fraction(int n); //只有1 个参数,设置分子为n,分母为1
Fraction(int n, int d); //设置分子为n,分母为d
void setValue(int n, int d); //设置分子和分母
int getNum(); //获取分子值
int getDen(); //获取分母值
double getDoubleValue(); //获取分数对应的小数值
Fraction add(const Fraction & f2); //分数相加
Fraction operator*(const Fraction &f2); //分数相乘
void output(); //按分数形式显示最简分数,按真分数或带分数形式输出,不要有多余的空格
friend ostream &operator<<(ostream &out, Fraction &f);//重载输出,分数形式显示最简分数,按真分数或带分数形式输出,不要有多余的空格
friend istream &operator>>(istream &in, Fraction &f); //输入重载
private:
int num; //分子
int den; //分母
void normalize();//规范化
int gcd(); //求最大公约数
};
Fraction::Fraction() {
num = 0;
den = 1;
}
Fraction::Fraction(int n) {
num = n;
den = 1;
}
Fraction::Fraction(int n, int d) {
num = n;
den = d;
normalize();
}
void Fraction::setValue(int n, int d) {
num = n;
den = d;
normalize();
}
int Fraction::getNum() {
return num;
}
int Fraction::getDen() {
return den;
}
double Fraction::getDoubleValue() {
return (double)num / den;
}
Fraction Fraction::add(const Fraction & f2) {
Fraction result;
result.num = num * f2.den + den * f2.num;
result.den = den * f2.den;
result.normalize();
return result;
}
Fraction Fraction::operator*(const Fraction &f2) {
Fraction result;
result.num = num * f2.num;
result.den = den * f2.den;
result.normalize();
return result;
}
void Fraction::output() {
int integer = num / den;
int remainder = abs(num) % den;
if (integer != 0) {
cout << integer;
if (remainder != 0) {
cout << " ";
}
}
if (remainder != 0) {
cout << remainder << "/" << den;
}
if (integer == 0 && remainder == 0) {
cout << "0";
}
}
ostream &operator<<(ostream &out, Fraction &f) {
f.output();
return out;
}
istream &operator>>(istream &in, Fraction &f) {
char slash;
in >> f.num;
in >> slash;
in >> f.den;
f.normalize();
return in;
}
void Fraction::normalize() {
if (den < 0) {
num *= -1;
den *= -1;
}
int divisor = gcd();
num /= divisor;
den /= divisor;
}
int Fraction::gcd() {
int a = abs(num);
int b = abs(den);
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
int main() {
Fraction f1(1, 2);
Fraction f2(3, 4);
Fraction f3 = f1.add(f2);
Fraction f4 = f1 * f2;
cout << f1 << " + " << f2 << " = " << f3 << endl;
cout << f1 << " * " << f2 << " = " << f4 << endl;
cout << "Enter a fraction: ";
cin >> f1;
cout << "The fraction you entered is: " << f1 << endl;
return 0;
}
纠正这个代码的错误之处#include <iostream> #include <string> using namespace std; class Fraction { private: int numerator; // 分子 int denominator; // 分母 public: Fraction(int num, int den); // 构造函数 // 重载运算符 Fraction operator+(const Fraction &fra) const; Fraction operator-(const Fraction &fra) const; Fraction operator*(const Fraction &fra) const; Fraction operator/(const Fraction &fra) const; Fraction& operator=(const Fraction &fra); void print() const; // 打印结果 }; // 构造函数 Fraction::Fraction(int num, int den) { // 省略部分代码 } // 重载加法运算符 Fraction Fraction::operator+(const Fraction &fra) const { // 省略部分代码 } // 重载减法运算符 Fraction Fraction::operator-(const Fraction &fra) const { // 省略部分代码 } // 重载乘法运算符 Fraction Fraction::operator*(const Fraction &fra) const { // 省略部分代码 } // 重载除法运算符 Fraction Fraction::operator/(const Fraction &fra) const { // 省略部分代码 } // 重载赋值运算符 Fraction& Fraction::operator=(const Fraction &fra) { // 省略部分代码 } // 打印最简分数或带分数 void Fraction::print() const { // 省略部分代码 } int main() { int x_num, x_den, y_num, y_den; cout << "Input x: "; scanf("%d/%d", &x_num, &x_den); // 格式化输入 cout << "Input y: "; scanf("%d/%d", &y_num, &y_den); // 格式化输入 Fraction x(x_num, x_den); Fraction y(y_num, y_den); Fraction result; // 加法 result = x + y; cout << "x+y="; result.print(); // 减法 result = x - y; cout << "x-y="; result.print(); // 乘法 result = x * y; cout << "x*y="; result.print(); // 除法 result = x / y; cout << "x/y="; result.print(); return 0; }
这段代码看起来没有什么明显的错误,但是有一些需要注意的地方:
1. 在类的定义中,构造函数应该放在 public 权限下,否则在 main() 函数中无法调用。
2. 使用 scanf() 函数进行输入时,需要包含头文件 <cstdio>。
3. 在 operator=() 函数中,应该返回一个引用类型的对象,即 Fraction&。
4. 在 main() 函数中,应该使用 cout 而不是 printf() 进行输出。
修改后的代码如下:
```
#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
class Fraction {
public:
Fraction(int num, int den); // 构造函数
Fraction& operator=(const Fraction &fra); // 重载赋值运算符
Fraction operator+(const Fraction &fra) const; // 重载加法运算符
Fraction operator-(const Fraction &fra) const; // 重载减法运算符
Fraction operator*(const Fraction &fra) const; // 重载乘法运算符
Fraction operator/(const Fraction &fra) const; // 重载除法运算符
void print() const; // 打印结果
private:
int numerator; // 分子
int denominator; // 分母
};
// 构造函数
Fraction::Fraction(int num, int den) {
numerator = num;
denominator = den;
}
// 重载赋值运算符
Fraction& Fraction::operator=(const Fraction &fra) {
numerator = fra.numerator;
denominator = fra.denominator;
return *this;
}
// 重载加法运算符
Fraction Fraction::operator+(const Fraction &fra) const {
int num = numerator * fra.denominator + denominator * fra.numerator;
int den = denominator * fra.denominator;
return Fraction(num, den);
}
// 重载减法运算符
Fraction Fraction::operator-(const Fraction &fra) const {
int num = numerator * fra.denominator - denominator * fra.numerator;
int den = denominator * fra.denominator;
return Fraction(num, den);
}
// 重载乘法运算符
Fraction Fraction::operator*(const Fraction &fra) const {
int num = numerator * fra.numerator;
int den = denominator * fra.denominator;
return Fraction(num, den);
}
// 重载除法运算符
Fraction Fraction::operator/(const Fraction &fra) const {
int num = numerator * fra.denominator;
int den = denominator * fra.numerator;
return Fraction(num, den);
}
// 打印最简分数或带分数
void Fraction::print() const {
int integer = numerator / denominator;
int num = numerator % denominator;
int den = denominator;
int gcd = __gcd(num, den);
num /= gcd;
den /= gcd;
if (integer != 0) {
cout << integer << " ";
}
if (num != 0) {
cout << num << "/" << den;
} else {
cout << 0;
}
cout << endl;
}
int main() {
int x_num, x_den, y_num, y_den;
cout << "Input x: ";
scanf("%d/%d", &x_num, &x_den); // 格式化输入
cout << "Input y: ";
scanf("%d/%d", &y_num, &y_den); // 格式化输入
Fraction x(x_num, x_den);
Fraction y(y_num, y_den);
Fraction result;
// 加法
result = x + y;
cout << "x+y=";
result.print();
// 减法
result = x - y;
cout << "x-y=";
result.print();
// 乘法
result = x * y;
cout << "x*y=";
result.print();
// 除法
result = x / y;
cout << "x/y=";
result.print();
return 0;
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)