问题描述1 定义一个整数类。 定义一个分数类,由整数类派生。能对分数进行各种计算和输入/输出。 2、功能要求 (1)定义整数类和分数类。其中,包括构造函数、析构函数、显示函数等。(2) 输入/输出: 对流提取和流插入运算符进行重载。(3) 计算功能:可进行分数的加、减、乘和除法运算 (4)化简功能: 将分数化简为最简分数。 (5)异常处理功能:分数中分母不能为零。 (6)菜单功能:每种功能的操作都是在菜单中进行相应选择

时间: 2024-02-18 17:03:26 浏览: 24
好的,下面是一个实现以上要求的 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`,其中分数类继承自整数类。它实现了分数的加、减、乘和除法运算,以及化简分数、输入/输出和异常处理等功能。在程序中还实现了一个菜单,让用户可以选择要进行的操作。请根据自己的需要进行修改和完善。

相关推荐

最新推荐

recommend-type

python练习题 :用户任意输入10个整数到列表中,然后由大到小排列并输出。

1.python是一种面向_对象 __的高级语言。 2.python可以在多种平台运行,这体现了python的___可移植___特性。 3.python源代码被解释器转换后的格式为___.pyc______。 4.python3.x默认使用的编码是_UTF-8________。 5....
recommend-type

定义一个整数集合类及相关运算

定义一个整数集合类 添加一个元素 删去一个元素 两个集合是否相等 集合的与、差、并、交
recommend-type

java 输入一个数字组成的数组(输出该数组的最大值和最小值)

主要介绍了java 输入一个数字组成的数组,输出该数组的最大值和最小值,需要的朋友可以参考下
recommend-type

C++通过自定义函数找出一个整数数组中第二大数的方法

主要介绍了C++通过自定义函数找出一个整数数组中第二大数的方法,涉及C++针对数组的遍历操作相关技巧,需要的朋友可以参考下
recommend-type

Python 实现输入任意多个数,并计算其平均值的例子

今天小编就为大家分享一篇Python 实现输入任意多个数,并计算其平均值的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。