问题描述1 定义一个整数类。 定义一个分数类,由整数类派生。能对分数进行各种计算和输入/输出。 2、功能要求 (1)定义整数类和分数类。其中,包括构造函数、析构函数、显示函数等。(2) 输入/输出: 对流提取和流插入运算符进行重载。(3) 计算功能:可进行分数的加、减、乘和除法运算 (4)化简功能: 将分数化简为最简分数。 (5)异常处理功能:分数中分母不能为零。 (6)菜单功能:每种功能的操作都是在菜单中进行相应选择
时间: 2024-02-18 19:03:26 浏览: 148
C++分数类计算器,完美运行
5星 · 资源好评率100%
好的,下面是一个实现以上要求的 C++ 代码:
```c++
#include <iostream>
#include <math.h>
using namespace std;
// 定义整数类
class Integer {
protected:
int num;
public:
Integer() {}
Integer(int n) : num(n) {}
virtual ~Integer() {}
void display() {
cout << num << endl;
}
friend istream& operator>>(istream& in, Integer& i) {
in >> i.num;
return in;
}
friend ostream& operator<<(ostream& out, Integer& i) {
out << i.num;
return out;
}
};
// 定义分数类
class Fraction : public Integer {
private:
int denominator; // 分母
public:
Fraction() {}
Fraction(int n, int d) : Integer(n), denominator(d) {}
virtual ~Fraction() {}
// 分数加法
Fraction operator+(Fraction f) {
int n = num * f.denominator + f.num * denominator;
int d = denominator * f.denominator;
return reduce(Fraction(n, d));
}
// 分数减法
Fraction operator-(Fraction f) {
int n = num * f.denominator - f.num * denominator;
int d = denominator * f.denominator;
return reduce(Fraction(n, d));
}
// 分数乘法
Fraction operator*(Fraction f) {
int n = num * f.num;
int d = denominator * f.denominator;
return reduce(Fraction(n, d));
}
// 分数除法
Fraction operator/(Fraction f) {
int n = num * f.denominator;
int d = denominator * f.num;
return reduce(Fraction(n, d));
}
// 化简分数
Fraction reduce(Fraction f) {
int gcd_num_den = gcd(f.num, f.denominator);
f.num /= gcd_num_den;
f.denominator /= gcd_num_den;
return f;
}
// 求最大公约数
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
void display() {
if (denominator == 1) {
cout << num << endl;
} else {
cout << num << "/" << denominator << endl;
}
}
void input() {
cout << "请输入分子和分母:" << endl;
cin >> num >> denominator;
if (denominator == 0) {
throw "分母不能为零!";
}
}
friend istream& operator>>(istream& in, Fraction& f) {
in >> f.num >> f.denominator;
if (f.denominator == 0) {
throw "分母不能为零!";
}
return in;
}
friend ostream& operator<<(ostream& out, Fraction& f) {
if (f.denominator == 1) {
out << f.num;
} else {
out << f.num << "/" << f.denominator;
}
return out;
}
};
int main() {
int choice = 0;
Fraction f1, f2, result;
do {
cout << "请选择要进行的操作:" << endl;
cout << "1. 输入分数" << endl;
cout << "2. 分数加法" << endl;
cout << "3. 分数减法" << endl;
cout << "4. 分数乘法" << endl;
cout << "5. 分数除法" << endl;
cout << "6. 退出程序" << endl;
cout << "请输入操作编号:";
cin >> choice;
switch (choice) {
case 1:
try {
cout << "请输入第一个分数:" << endl;
cin >> f1;
cout << "请输入第二个分数:" << endl;
cin >> f2;
} catch (const char* msg) {
cerr << msg << endl;
}
break;
case 2:
result = f1 + f2;
cout << "两个分数的和为:" << result << endl;
break;
case 3:
result = f1 - f2;
cout << "两个分数的差为:" << result << endl;
break;
case 4:
result = f1 * f2;
cout << "两个分数的积为:" << result << endl;
break;
case 5:
try {
result = f1 / f2;
cout << "两个分数的商为:" << result << endl;
} catch (const char* msg) {
cerr << msg << endl;
}
break;
case 6:
cout << "程序已退出!" << endl;
break;
default:
cout << "输入的操作编号无效,请重新输入!" << endl;
break;
}
} while (choice != 6);
return 0;
}
```
这个程序定义了一个整数类 `Integer` 和一个分数类 `Fraction`,其中分数类继承自整数类。它实现了分数的加、减、乘和除法运算,以及化简分数、输入/输出和异常处理等功能。在程序中还实现了一个菜单,让用户可以选择要进行的操作。请根据自己的需要进行修改和完善。
阅读全文