分数类的构造

#include<iostream.h>
//using namespace std;

class CFraction
{
private:
	int nume;  // 分子
	int deno;  // 分母
public:
	CFraction(int n=0,int d=0);
	CFraction operator +(CFraction &c);
	CFraction operator -(CFraction &c);
	CFraction operator *(CFraction &c);
	CFraction operator /(CFraction &c);
	CFraction operator +();
	CFraction operator -();
	CFraction operator ~();
	bool  operator >(CFraction &c);
	bool  operator <(CFraction &c);
	bool  operator >=(CFraction &c);
	bool  operator <=(CFraction &c);
	bool  operator !=(CFraction &c);
	bool  operator ==(CFraction &c);
	friend istream &operator>>(istream &input,CFraction &c);
	friend ostream &operator<<(ostream &input,CFraction &c);
	void display();
	void simplify();
};
CFraction::CFraction(int n,int d):nume(n),deno(d){}
istream &operator >>(istream &input,CFraction &c)
{
	input>>c.nume>>c.deno;
	return input;
}
ostream &operator<<(ostream &output,CFraction &c)
{
	output<<c.nume<<"/"<<c.deno;
	return output;
}
CFraction CFraction::operator +(CFraction &c)
{
	CFraction result;
	result.deno=deno*c.deno;
	result.nume=nume*c.deno+deno*c.nume;
	return result;
}
CFraction CFraction::operator -(CFraction &c)
{
	CFraction result;
	result.deno=deno*c.deno;
	result.nume=nume*c.deno-deno*c.nume;
	return result;
}
CFraction CFraction::operator *(CFraction &c)
{
	CFraction result;
	result.deno=deno*c.deno;
	result.nume=nume*c.nume;
	return result;
}
CFraction CFraction::operator /(CFraction &c)
{
	CFraction result;
	result.deno=deno*c.nume;
	result.nume=nume*c.deno;
	return result;
}
bool CFraction::operator >(CFraction &c)
{
	double a=(double)nume/(double)deno;
	double b=(double)c.nume/(double)c.deno;
	if(a>b)
		return true;
	else
		return false;
}
bool CFraction::operator <(CFraction &c)
{
	double a=(double)nume/(double)deno;
	double b=(double)c.nume/(double)c.deno;
	if(a<b)
		return true;
	else
		return false;
}
bool CFraction::operator >=(CFraction &c)
{
	double a=(double)nume/(double)deno;
	double b=(double)c.nume/(double)c.deno;
	if(a>=b)
		return true;
	else
		return false;
}
bool CFraction::operator <=(CFraction &c)
{
	double a=(double)nume/(double)deno;
	double b=(double)c.nume/(double)c.deno;
	if(a<=b)
		return true;
	else
		return false;
}
bool CFraction::operator ==(CFraction &c)
{
	double a=(double)nume/(double)deno;
	double b=(double)c.nume/(double)c.deno;
	if(a==b)
		return true;
	else
		return false;
}
bool CFraction::operator !=(CFraction &c)
{
	double a=(double)nume/(double)deno;
	double b=(double)c.nume/(double)c.deno;
	if(a!=b)
		return true;
	else
		return false;
}
CFraction CFraction::operator +()
{
	return CFraction(nume,deno);
}
CFraction CFraction::operator -()//相反数
{
	return CFraction(-nume,deno);
}
CFraction CFraction::operator ~()//倒数
{
    CFraction x;
    x.nume=deno;
    x.deno=nume; 
    if(x.deno<0)
    {
        x.deno=-x.deno;
        x.nume=-x.nume;
    }
    return x;
}
void CFraction::display()
{
	cout<<nume<<"/"<<deno<<endl;
}
void CFraction::simplify()
{
	int n;
	int a=nume;
	int b=deno;
	while(n=a%b)//求最大公约数
	{
		a=b;
		b=n;
	}
	nume/=b;
	deno/=b;
	if(deno<0)//保证符号在分子上
	{
		nume=-nume;
		deno=-deno;
	}
}
int main()
{
	CFraction c1(3,2),c2(9,7),c3,c4(9,1);
	cout<<"c1:"<<c1<<endl;
	cout<<"c2:"<<c2<<endl;
	c3=c1+c2;
	cout<<"c1+c2:"<<c3<<endl;
	c3=c1-c2;
	cout<<"c1-c2:"<<c3<<endl;
	c3=c1*c2;
	c3.simplify();
	cout<<"c1*c2:"<<c3<<endl;
	c3=c1/c2;
	c3.simplify();
	cout<<"c1/c2:"<<c3<<endl;
	if(c1>c2)
		cout<<"比较:"<<c1<<">"<<c2<<endl;
	cout<<"-c1:"<<-c1<<endl;
	cout<<"+c1:"<<+c1<<endl;
	cout<<"~c4:"<<~c4<<endl;
	return 0;
}

运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值