⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d_8_2.cpp

📁 C++应用教程原码,里面包含该书中有十三章内容的代码,详细具体
💻 CPP
字号:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

class Fraction {
private:
	int numerator,denominator;
	void optimization();
public:
	Fraction(int x=0,int y=1)
		: numerator(x),denominator(y)
	{	optimization();
	}

	friend ostream& operator << (ostream&out, Fraction &c);
	friend Fraction operator +(Fraction &num1,Fraction &num2);
	friend Fraction operator -(Fraction &num1,Fraction &num2);
	friend Fraction operator *(Fraction &num1,Fraction &num2);
	friend Fraction operator /(Fraction &num1,Fraction &num2);
	friend bool operator==(Fraction &num1,Fraction &num2);
};
void Fraction::optimization()
{
	int gcd,min,max;
	if(numerator==0)
	{  //如分子为0,则置分母为1后返回
		denominator=1;
		return;
	}
	gcd=(abs(numerator)>abs(denominator)?abs(denominator):abs(numerator));
	if(gcd==0) return;

    if(abs(numerator)>abs(denominator))
	{max=numerator;min=denominator;}
	else
	{min=numerator;max=denominator;}
	do{
		gcd=max%min;
		max=min;
		min=gcd;
	}while(gcd!=0);

	numerator/=max;
	denominator/=max;
	if(numerator<0 && denominator<0)
	{
		numerator=-numerator;
		denominator=-denominator;
	}
	else if(numerator<0 || denominator<0)
	{
		numerator=-abs(numerator);
		denominator=abs(denominator);
	}
}

ostream& operator << (ostream&out, Fraction &c)

	{  out<<c.numerator;
	   if(c.numerator!=0 && c.denominator!=1 &&c.denominator!=0)
	    	cout<<"/"<<c.denominator<< endl;
	   else if(c.denominator==0)
	    	    cout<<"ERROR!The denominator is equal to 0."<< endl;
	        else cout<< endl;
		return out;
	}

Fraction operator +(Fraction &num1,Fraction &num2)
{
	Fraction temp;
	temp.denominator=num1.denominator*num2.denominator;
	temp.numerator=num1.numerator*num2.denominator+
		num1.denominator*num2.numerator;
	temp.optimization();
	return temp;
}
Fraction operator -(Fraction &num1,Fraction &num2)
{
	Fraction temp;
	temp.denominator=num1.denominator*num2.denominator;
	temp.numerator=num1.numerator*num2.denominator-
		num1.denominator*num2.numerator;
	temp.optimization();
	return temp;
}
Fraction operator *(Fraction &num1,Fraction &num2)
{
	Fraction temp;
	temp.denominator=num1.denominator*num2.denominator;
	temp.numerator=num1.numerator*num2.numerator;
	temp.optimization();
	return temp;
}	
Fraction operator /(Fraction &num1,Fraction &num2)
{
	Fraction temp;
	temp.denominator=num1.denominator*num2.numerator;
	temp.numerator=num1.numerator*num2.denominator;
	temp.optimization();
	return temp;
}	
bool operator==(Fraction &num1,Fraction &num2)
{
	if(num1.numerator==num2.numerator && 
		num1.denominator==num2.denominator)
		return true;
	else 
		return false;
}

void main()
{
	Fraction r1(1,14),r2(11,12),r3(-63,789);
	cout<<"r1="<<r1;
	cout<<"r2="<<r2;
	cout<<"r3="<<r3;
	cout<<"r1+r2="<< (r1+r2);
	cout<<"r1-r2="<<(r1-r2);
	cout<<"r1*r3="<<(r1*r3);
	cout<<"r2/r3="<<(r2/r3);
	cin.get(); //等待结束,以便调测程序,可以删除
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -