第八周任务四——关于分数与整数运算一各种运算符的重载

/* (程序头部注释开始) 
* 程序的版权和版本声明部分 
* Copyright (c) 2011, 烟台大学计算机学院学生  
* All rights reserved. 
* 文件名称: 第八周任务四——关于分数与整数运算一各种运算符的重载                           
* 作    者: 石丽君                              
* 完成日期:      2012   年      4 月10        日 
* 版 本 号:           
 
* 对任务及求解方法的描述部分 
* 输入描述:  
* 问题描述: 分数与整数运算及各种运算符的重载 
* 程序输出:  
* 程序头部的注释结束 
*/  
#include<iostream>
using namespace std;
int gcd(int m,int n);  
class CFraction
{
private:
 int nume;  // 分子
 int deno;  // 分母
public:
 CFraction(int nu=0,int de=1);   //构造函数,初始化用   
    void Set(int nu=0,int de=1);    //置值,改变值时用   
 CFraction operator+(int &i);
 CFraction operator-(int &i);
 CFraction operator*(int &i);
 CFraction operator/(int &i);
 friend CFraction operator+(int &i,CFraction &c2);
 friend CFraction operator-(int &i,CFraction &c2);
 friend CFraction operator*(int &i,CFraction &c2);
 friend CFraction operator/(int &i,CFraction &c2);
 bool operator>=(int i);
 CFraction operator-();
 void display(); 
 void Simplify();   //化简(使分子分母没有公因子)
 
};
CFraction::CFraction(int nu,int de)  
{  
    if(de!=0)  
    {  
        nume=nu;  
        deno=de;  
    }  
    else  
    {  
        cout<<"格式错误,程序退出\n";  
        system("pause");  
        exit(0);  
    }  
}  
void CFraction:: Set(int nu,int de)  
{  
    if(de!=0)  
    {  
  
        nume=nu;  
        deno=de;  
    }  
} 
void  CFraction::display() 
{
 cout<<nume<<'/'<<deno<<endl;
}
//求分子,分母最大公约数   
int gcd(int m,int n)  
{  
    int r;  
    if(m<n)  
    {  
        r=m;  
        m=n;  
        n=r;  
    }  
    while(r=m%n)  
    {  
        if(r==0)  
            break;  
        m=n;  
        n=r;  
    }  
    return n;  
}  
//将分数化简   

void CFraction::Simplify()  
{  
    int n=gcd(nume,deno);  
    nume=nume/n;  
    deno=deno/n;
 cout<<nume<<'/'<<deno;  
}  
CFraction CFraction::operator+(int &i)
{
 CFraction c;
 c.deno=deno;
 c.nume=nume+i*deno;
 return c;
}
CFraction CFraction::operator-(int &i)
{
 CFraction c;
 c.deno=deno;
 c.nume=nume-i*deno;
 return c;
}
CFraction CFraction::operator*(int &i)
{
 CFraction c;
 c.deno=deno;
 c.nume=nume*i;
 return c;
 
}
CFraction CFraction::operator/(int &i)
{
 CFraction c;
 c.deno=deno*i;
 c.nume=nume;
 return c;
 
}
CFraction operator+(int &i,CFraction &c2)
{
 CFraction c;
 c.deno=c2.deno;
 c.nume=i*c2.deno+c2.nume;
 return c;

}
CFraction operator-(int &i,CFraction &c2)
{
 CFraction c;
 c.deno=c2.deno;
 c.nume=i*c2.deno-c2.nume;
 return c;

}
CFraction operator*(int &i,CFraction &c2)
{
 CFraction c;
 c.deno=c2.deno;
 c.nume=i*c2.nume;
 return c;
 
}
CFraction operator/(int &i,CFraction &c2)
{
 CFraction c;
 c.deno=i*c2.deno;
 c.nume=c2.nume;
 return c;
 
}
bool CFraction::operator>=(int i)
{
 if(nume>=(i*deno))
  return true;
 else
  return false;
 
 
}
CFraction CFraction::operator-()
{
 CFraction c;
 c.nume=-nume;
 c.deno=deno;
 return c;
}
void main()
{
 CFraction c1(3,4),c;
 int s=3;

 cout<<"s="<<s<<"  "<<"c1=";
 c1.display();
 c=s+c1;
 cout<<"s+c1=";
 c.Simplify();
 cout<<endl;
 c=c1+s;
 cout<<"c1+s=";
 c.Simplify();
 cout<<endl;
 c=c1-s;
 cout<<"c1-s=";
 c.Simplify();
 cout<<endl;
 c=s-c1;
 cout<<"s-c1=";
 c.Simplify();
 cout<<endl;
 c=c1*s;
 cout<<"c1*s=";
 c.Simplify();
 cout<<endl;
 c=s*c1;
 cout<<"s*c1=";
 c.Simplify();
 cout<<endl;
 c=c1/s;
 cout<<"c1/s=";
 c.Simplify();
 cout<<endl;
 c=s/c1;
 cout<<"s/c1=";
 c.Simplify();
 cout<<endl;
 c=-c1;
 cout<<"-c1=";
 c.Simplify();
 cout<<endl;
 if(c1>=s) cout<<"c1>s"<<endl;
 system("pause");
}



上机感言:bool operator>=(int i)做成员函数,只写一个参数,int i.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值