运算符重载----有理数类

2024-01-10 13:18
文章标签 重载 运算符 有理数

本文主要是介绍运算符重载----有理数类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/*
定义一个有理数类Rational,重载算术运算符。写一个完整的程序,测试各种运算符的使用,要求输出化简后的计算结果,注意分母不能为零!
测试代码样例:
Rational A(2,6),B(1,-2),C;
C = -A;  
C.print( );//输出1/3   
C = A + B ;  
C.print( );  //输出-1/6
C = C*A/B;  
C.print( );   
C =  ++A ;   
A.print( ); 
C.print( ); 
C =  B-- ;    
B.print( );
C.print(  );
*/
#include<iostream.h>
class Rational
{
public:
Rational(int nn=1,int mm=1);
void print();
void simple();  
Rational  operator+(Rational & a);	//加法
friend  Rational  operator-(Rational & a,Rational & b);//减法
friend  Rational  operator*(Rational & a,Rational & b);//乘法
friend  Rational  operator/(Rational & a,Rational & b);//除法
Rational  operator-();//取反
Rational &  operator ++ ();//r=++r1
Rational  operator ++ (int);//r = r1++
Rational &  operator -- ();//r=--r1
Rational  operator -- (int);//r = r1--
operator double();
friend ostream& operator<<(ostream& output, Rational& a);
bool operator<(Rational &);
friend bool operator==(Rational& ,Rational& );
private:
int m;   // 分母 
int n;   // 分子
};
Rational:: Rational(int nn,int mm )
{
m= (mm!=0) ? mm:1;
n=nn; 
}
// r = r1 + r2 ; 
Rational Rational::operator+(Rational & A)
{
Rational C;
C.n = n*A.m+m*A.n;
C.m = m*A.m;
C.simple();
return C;
}
Rational Rational::operator-()
{  
Rational C(-n,m); 
C.simple();
return C;
}
// r = r1 - r2 ; 
Rational operator-(Rational & A,Rational & B)
{
Rational C;
C.n = A.n*B.m-A.m*B.n;
C.m = A.m*B.m;
C.simple();
return C;
}
// r = r1 * r2 ; 
Rational operator*(Rational & A,Rational & B)
{
Rational C;
C.n = A.n*B.n;
C.m = A.m*B.m;
C.simple();
return C;
}
// r = r1 / r2 ; 
Rational operator/(Rational & A,Rational & B)
{
Rational C;
C.n = A.n*B.m;
C.m = A.m*B.n;
C.simple();
return C;
}
//r = ++r1;
Rational&  Rational::operator++()
{ 
n = n+m;
return *this;
}
//r = r1++;
Rational Rational::operator++(int)
{ 
Rational C(n,m);
n+=m;
return C; 
}
//r = --r1;
Rational&  Rational::operator--()
{ 
n = n-m;
return *this;
}
//r = r1--;
Rational Rational::operator--(int)
{ 
Rational C(n,m);
n-=m;
return C; 
}
Rational::operator double()
{
return (double)n/m;  
}
// r1>r2
bool Rational::operator<(Rational& a)
{
return double(n)/m >(double)a.n/a.m ? true : false;
}
//r1==r2
bool operator==(Rational& a,Rational&b )
{
return double(a.n)/a.m == (double)b.n/b.m ? true : false;
}
//cout<<r;
ostream& operator<<(ostream& output, Rational& a)
{
//output<<(double)a.n/a.m<<endl;
if(a.m<0)  
output<<"The value is "<< -a.n <<'/'<<-a.m<<endl;
else
output<<"The value is "<< a.n <<'/'<<a.m<<endl;
return output;
}
void Rational::print()
{
simple();
if(m<0)
cout<<"The value is "<< -n <<'/'<<-m<<endl;
else
cout<<"The value is "<< n <<'/'<<m<<endl;
}
void  Rational::simple()
{
int a = m ,b = n, r = 0;
if(m<n)
{
a = n;
b = m;
}
r = a % b ;			
while ( r != 0 )
{
a = b ;
b = r ; 
r = a % b ;	
}	
n /= b;
m /= b;
}
void main()
{
Rational A(2,6),B(1,-2),C;
C = -A;
C.print();// -1/3   
C = A + B;
C.print();// -1/6
C = C*A/B;  
C.print();// 1/9
C =  ++A ;
A.print();// 4/3
C.print();// 4/3
C =  B-- ;
B.print();// -3/2
C.print();// -1/2
}

这篇关于运算符重载----有理数类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/590933

相关文章

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Kotlin运算符重载函数及作用场景

《Kotlin运算符重载函数及作用场景》在Kotlin里,运算符重载函数允许为自定义类型重新定义现有的运算符(如+-…)行为,从而让自定义类型能像内置类型那样使用运算符,本文给大家介绍Kotlin运算... 目录基本语法作用场景类对象数据类型接口注意事项在 Kotlin 里,运算符重载函数允许为自定义类型重

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

【重学 MySQL】十九、位运算符的使用

【重学 MySQL】十九、位运算符的使用 示例检查权限添加权限移除权限 在 MySQL 中,位运算符允许你直接在整数类型的列或表达式上进行位级操作。这些操作对于处理那些需要在二进制表示上进行直接修改或比较的场景特别有用,比如权限管理、状态标记等。 &(位与) 对两个数的二进制表示进行位与操作。只有两个相应的二进制位都为 1 时,结果的该位才为 1,否则为 0。 |(位

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

第二十四章 rust中的运算符重载

注意 本系列文章已升级、转移至我的自建站点中,本章原文为:rust中的运算符重载 目录 注意一、前言二、基本使用三、常用运算符四、通用约束 一、前言 C/C++中有运算符重载这一概念,它的目的是让即使含不相干的内容也能通过我们自定义的方法进行运算符操作运算。 比如字符串本身是不能相加的,但由于C++中的String重载了运算符+,所以我们就可以将两个字符串进行相加、但实际

C++可以被重载的操作符Overloadable operators

C++允许绝大多数操作符被重载,也就是重新定义操作符实现的功能,这样它们的行为可以被设计出来以适应所有的数据类型,包括类。 以下是C++可以被重载的操作符(Overloadable operators): //四则运算符+ - * / %+= -= *= /= %=//比较运算符> >= == != //赋值运算符= //位操作