面向对象程序设计:运算符重载习题

宋桂琴白皮书项目2(P8)二、1

题目:

        编写有理数(即分数,包括整数类型的分子,分母)类,并进行运算符重载,编写运算符“+”,“-”,“*”,“/”的重载函数,在主函数的函数体内实现使用运算符重载直接进行有理数对象的加减乘除运算。

程序:(部分)

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
class Rational {
protected:
	int denomenator;//分母
	int molecule;//分子
public:
	void input() {
		cout << "please enter the molecule and the denomenator" << endl;
		cin >> molecule >> denomenator;
	}
	void reduction();
public:
	friend Rational operator +(Rational, Rational);
	friend Rational operator *(Rational, Rational);
	friend ostream& operator <<(ostream&, Rational&);
};

inline int gcd(int a, int b) {
	int r;
	while (b > 0) {
		r = a % b;
		a = b;
		b = r;
	}
	return a;
}

ostream& operator <<(ostream& output, Rational& r) {
	 if(r.denomenator!=1){
		output << r.molecule << "/" << r.denomenator;
	 }
	 else {
		 output << r.molecule;
	 }
	return output;
}


void Rational::reduction() {//约分函数
	int gcdred = gcd(denomenator, molecule);
	denomenator /= gcdred;
	molecule /= gcdred;
	return;
}
Rational operator +(Rational r1, Rational r2) {//运算符加号的重载
	Rational res;
	int lcm_plus = r1.denomenator * r2.denomenator;
	res.denomenator = lcm_plus;
	res.molecule = ((lcm_plus / r1.denomenator) * r1.molecule) + ((lcm_plus / r2.denomenator) * r2.molecule);
	res.reduction();
	return res;
}
Rational operator *(Rational r1, Rational r2) {
	Rational res;
	res.denomenator = r1.denomenator * r2.denomenator;
	res.molecule = r1.molecule * r2.molecule;
	res.reduction();
	return res;
}
int main() {
	Rational a, b, res;
	a.input();
	b.input();
	res = a + b;
	cout << a << "+" << b << "=" << res<<endl;
	res = a * b;
	cout << a << "*" << b << "=" << res << endl;
	
}

运行:(部分)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/722557.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习课程复习——线性回归

Q&#xff1a;回归和分类的区别&#xff1f; 回归是连续的&#xff0c;分类是离散的 Q:用最小二乘法对线性回归模型进行参数估计思路 例题

七、(正点原子)Linux并发与竞争

Linux是多任务操作系统&#xff0c;肯定会存在多个任务共同操作同一段内存或者设备的情况&#xff0c;多个任务甚至中断都能访问的资源叫做共享资源。在驱动开发中要注意对共享资源的保护&#xff0c;也就是要处理对共享资源的并发访问。 一、并发与竞争 1、简介 并发就是多个…

安装docker与docker-compose

1. 项目目标 &#xff08;1&#xff09;安装docker &#xff08;2&#xff09;安装docker-compose &#xff08;3&#xff09;配置镜像源 2. 项目准备 centos7.9系统 3. 项目实施 3.1. 安装docker 安装基本命令&#xff1a; yum -y install wget yum -y install vim y…

Matlab绘制三维图像(论文插图)

Matlab绘制三维图像 hfigure; % 创建 surf surf(PHDeformed_1Unwrap); shading interp;lightangle(45,75); % 创建 zlabel zlabel(Z(phase/rad),FontWeight,bold,FontName,Times New Roman); % 创建 ylabel ylabel(Y(pixel),FontWeight,bold,FontName,Times New Roman); % 创建…

汇编基础之使用vscode写hello world

汇编语言&#xff08;Assembly Language&#xff09; 概述 汇编语言&#xff08;Assembly Language&#xff09;是一种低级编程语言&#xff0c;它直接对应于计算机的机器代码&#xff08;machine code&#xff09;&#xff0c;但使用了更易读的文本符号。每台个人计算机都有…

B端系统的UI框架选择,不要输在了起跑线,如何破?

所谓成也框架、败也框架&#xff0c;框架就是这么的优点和缺点鲜明&#xff0c;市面上的框架多如牛毛&#xff0c;谁家的最优秀呢&#xff1f;为何框架搞出来的UI界面同质化呢&#xff0c;如何避免这种情况&#xff0c;如何在框架的基础上进一步提升颜值和体验呢&#xff0c;本…

AI搜索工具,提升你的工作效率

当我们需要查询某个内容的时候&#xff0c;除了可以通过搜索引擎来查找&#xff0c;还可以通过AI搜索工具来查找。AI搜索工具会智能的从网络信息中查找答案并整理后给我们结果。除了搜索结果&#xff0c;AI搜索工具还可以用来帮我们创作内容&#xff0c;比如你需要写一篇文章&a…

2024中国低碳供应链物流创新发展报告

来源&#xff1a;罗戈研究 近期历史回顾&#xff1a;

STM32--IAP程序升级实验

1. STM32程序升级方法 1.1 ST-link / J-link下载 将编译生成的hex文件使用ST-Link/J-Link工具直接下载进 Flash 即可。Keil中点击下载也能一键下载。下载后的代码会存放在Flash的起始地址0x0800 0000处。 简单补充一句&#xff0c;bin文件和hex文件的区别&#xff1a; bin文…

数据可视化作业一:江西人口数据可视化

目录 作业要求 一、江西省各地市&#xff08;年末&#xff09;常住人口分布地图绘制 1.1 代码实现 1.1.1采用Map实现 1.1.2 采用Geo实现 1.2 绘制结果 二、江西省各地市常住人口分布饼状图绘制 2.1代码实现 2.2 绘制结果 三、江西省各地市常住人口城镇化率柱状图绘制 …

7_机械臂工作台坐标系理论_一般坐标系的映射_2

1、一般坐标系的映射 经常有这种情况&#xff0c;我们已知矢量相对坐标系{B}的描述&#xff0c;并且想求出它相对于另一个坐标系{A}的描述。结合上次的理论和平时对机械臂使用的经验&#xff0c;使用3点法标定机械臂工作台坐标系(我习惯称为用户坐标系&#xff0c;下面称为用户…

混剪视频的素材一般去哪找?做短视频素材混剪网站库分享!

在短视频和自媒体的快速发展时代&#xff0c;混剪视频已成为许多创作者展现创意和吸引观众的重要手段。制作高质量的混剪视频离不开优质素材的支持。今天&#xff0c;我将为大家推荐几个优秀的素材网站&#xff0c;帮助你轻松获取制作混剪视频所需的多样素材&#xff0c;提升视…

PyQt5.QtWidgets常用函数及说明

目录 PyQt5.QtWidgets简介常用函数设置窗口标题和固定大小创建垂直布局创建进度条 PyQt5.QtWidgets简介 PyQt5.QtWidgets 是 PyQt5 库中的一个模块&#xff0c;它包含了用于创建图形用户界面&#xff08;GUI&#xff09;的各种小部件&#xff08;widgets&#xff09;。这些小部…

Gobject tutorial 六

Instantiatable classed types Initialization and destruction 类型的实例化是通过函数g_tpye_create_instance()实现的。这个函数首先会查找与类型相关的GTypeInfo结构体&#xff0c;之后&#xff0c;查询结构体中的instance_size和 instance policy即 n_preallocs(在 2.10版…

陶建辉入选 2023 年度“中国物联网行业卓越人物榜”

在这个技术飞速发展的时代&#xff0c;物联网行业作为推动社会进步的重要力量&#xff0c;正在不断地演化和革新。近日&#xff0c;中国智联网生态大会暨“2023 物联之星”年度榜单颁奖典礼在上海浦东举行。现场公布了拥有物联网行业奥斯卡奖之称的 ——“物联之星 2023 中国物…

深度 | OpenAI COO闭门访谈:大模型已至,企业如何落地?

图片来源&#xff1a;OpenAI Z Highlights&#xff1a; 仅仅允许公司单一部门使用互联网非常可笑。类似地&#xff0c;给所有员工开放AI权限将会是最大的催化剂。当前阶段的AI企业级部署&#xff0c;要让员工熟悉AI工具的使用方式&#xff0c;让他们将工作流程与模型的功能紧密…

九、数据结构(并查集)

文章目录 1.并查集操作的简单实现2.解决问题3. 并查集优化3.1 合并的优化3.2查询优化3.3查询优化2 通常用“帮派”的例子来说明并查集的应用背景&#xff1a;在一个城市中有 n ( n < 1 0 6 ) n(n < 10^6) n(n<106)个人&#xff0c;他们分成不同的帮派&#xff0c;给出…

[算法刷题积累] 两数之和以及进阶引用

两数之和很经典&#xff0c;通常对于首先想到的就是暴力的求解&#xff0c;当然这没有问题&#xff0c;但是我们如果想要追求更优秀算法&#xff0c;就需要去实现更加简便的复杂度。 这里就要提到我们的哈希表法: 我们可以使用unordered_map去实现&#xff0c;也可以根据题目&a…

【Linux】线程(二:线程控制)

本篇文章主要围绕线程控制来进行展开。 主题思路是以create与join两个接口展开。 目录 pthread_create 与 pthread_join:pthread_create:pthread_join: 代码&#xff1a;问题一&#xff1a;主线程与新线程谁先退出&#xff1f;问题二&#xff1a;哪个线程应该最后退出&#xf…

【关键点检测和描述】SuperPoint

一、引言 论文&#xff1a; SuperPoint: Self-Supervised Interest Point Detection and Description 作者&#xff1a; Magic Leap 代码&#xff1a; SuperPoint 特点&#xff1a; 提出Homographic Adaptation策略&#xff0c;提升模型从虚拟数据迁移到真实数据的表现&#x…