用运算符重载实现分数的加减乘除(c++实现)

此程序运用c++程序中的运算符重载来做。

text.cpp
#include<iostream>
#include<iomanip>
#include"Score.h"
using namespace std;
int main()
{
	Score a,b,c;
	cout <<"输入三个分数" <<endl;
	cin>>a;
	cin>>b;
	cin>>c;
	a=a+b;
	cout<<"a=a+b的值为:";
	cout <<a<<endl;
	a=a-b;
	cout <<"a=a-b的值为:"; 
	cout <<a<<endl;
	cout <<"b=b*c的值为:"; 
	b=c*b;
	cout <<b<<endl;
	cout <<"a=a/c的值为:"; 
	a=a/c;
	cout <<a<<endl;
}

Srore.h
#include<iostream>
#ifndef SCORE_H
#define SCORE_H
using namespace std; 
class Score
{
	friend ostream & operator<<(ostream&,     const Score &);
	friend istream & operator>>(istream&,     Score &);
	friend	Score operator+(Score x,Score y);
	friend	Score operator-(Score x,Score y);
	friend	Score operator*(Score x,Score y);
	friend	Score operator/(Score x,Score y);
	public:
		Score(int m=0,int d=0);
		~Score();
	private: 
	int mole;
	int deno;
};

#endif

Score.cpp
#include "Score.h"
#include<iostream>
#include<iomanip>
using namespace std;
ostream& operator<<(ostream &output,    const Score &sco)
{
	output<< sco.mole << "/" << sco.deno;
	return output; 
}
istream& operator>>(istream &input,    Score &sco)
{
	input>>sco.mole;
	input.ignore(1);                                
	input>>sco.deno;
	return input;
}
Score::Score(int m,int d)
{
	mole=m;
	deno=d;
}
Score operator+(Score x,Score y)
{
	int z;
	int q;
	if(x.deno==y.deno)
	{
		x.mole=x.mole+y.mole;
	}
	z=x.deno;
	q=y.deno;
	while(z%q!=0)
	{
		z=q;
		q=z%q;
	}
	z=x.deno;
	q=y.deno;
	x.deno=x.deno*y.deno/q;
	x.mole=x.mole*(x.deno/z)+y.mole*(x.mole/q);
	return x;
}
Score operator-(Score x,Score y)
{
	int z;
	int q;
	if(x.deno==y.deno)
	{
		x.mole=x.mole-y.mole;
	}
	z=x.deno;
	q=y.deno;
	while(z%q!=0)
	{
		z=q;
		q=z%q;
	}
	z=x.deno;
	q=y.deno;
	x.deno=x.deno*y.deno/q;
	x.mole=x.mole*(x.deno/z)- y.mole*(x.mole/q);
	return x;
}
Score operator*(Score x,Score y)
{
	x.mole=x.mole*y.mole;
	x.deno=x.deno*y.deno;
	return x;
}
Score 	operator/(Score x,Score y)
{
	int z=y.mole;
	y.mole=y.deno;
	y.deno=z;
	x.mole=x.mole*y.mole;
	x.deno=x.deno*y.deno;
	return x;
}
Score::~Score()
{
}
  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三少爷的剑!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值