您的位置:首页 > 编程语言 > C语言/C++

C++程序设计----- 运算符的重载 【项目3-分数类中的运算符重载】

2014-03-21 10:53 176 查看
/*
* 程序的版权和版本声明部分
* Copyright (c)2013, 在校学生
* All rightsreserved.
* 文件名称: 项目3.cpp
* 作    者:刘旺
* 完成日期:2014年3月21日
* 版本号: v1.0
*
* 输入描述:
* 问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、
*           求反、比较(6种关系)的运算。可以从第5周项目2的代码开始工作。
* 程序输出:
* 问题分析:
*/
#include <iostream>
using namespace std ;

class CFraction
{
    private:
        int nume;  // 分子
        int deno;  // 分母
    public:
         //构造函数及运算符重载的函数声明
           CFraction():nume(0),deno(0){}
           CFraction(int n, int d):nume(n),deno(d){}
           CFraction operator+(CFraction &cp) ;
           CFraction operator-(CFraction &cp) ;
           CFraction operator*(CFraction &cp) ;
           CFraction operator/(CFraction &cp) ;
           void operator<(CFraction &cp) ;
           void operator>(CFraction &cp) ;
           void operator-() ;
           void print() ; //显示
};

CFraction CFraction::operator+(CFraction &cp)
{
        CFraction p ;
        if(deno>cp.deno)
        {
            if(deno%cp.deno==0)
            {
                p.deno = deno ;
                p.nume = (deno/cp.deno*cp.nume)+nume ;
            }
            else
            {
                p.deno = deno*cp.deno ;
                p.nume = cp.nume*deno+nume*cp.deno ;
            }

        }
        else if(deno < cp.deno)
        {
               if(cp.deno%deno==0)
            {
                p.deno = cp.deno ;
                p.nume = (cp.deno/deno*nume)+cp.nume ;
            }
            else
            {
                p.deno = deno*cp.deno ;
                p.nume = cp.nume*deno+nume*cp.deno ;
            }
        }
        else
        {
          p.nume = nume+cp.nume ;
          p.deno = deno ;
        }
        return p ;
}

CFraction CFraction::operator-(CFraction &cp)
{
        CFraction p ;
        if(deno>cp.deno)
        {
            if(deno%cp.deno==0)
            {
                p.deno = deno ;
                p.nume = nume-(deno/cp.deno*cp.nume) ;
            }
            else
            {
                p.deno = deno*cp.deno ;
                p.nume = nume*cp.deno-cp.nume*deno;
            }

        }
        else if(deno < cp.deno)
        {
               if(cp.deno%deno==0)
            {
                p.deno = cp.deno ;
                p.nume = (cp.deno/deno*nume)-cp.nume ;
            }
            else
            {
                p.deno = deno*cp.deno ;
                p.nume = nume*cp.deno-cp.nume*deno ;
            }
        }
        else
        {
          p.nume = nume-cp.nume ;
          p.deno = deno ;
        }
        return p ;
}

CFraction CFraction::operator*(CFraction &cp)
{
         CFraction p ;
         p.nume = nume*cp.nume ;
         p.deno = deno*cp.deno ;
         return p ;
}

CFraction CFraction::operator/(CFraction &cp)
{
         CFraction p ;
         p.nume = nume*cp.deno ;
         p.deno = deno*cp.nume ;
         return p ;
}

void CFraction::print()
{
       if(nume==0)
       {
           cout << nume << endl ;
       }
       else if(nume>=deno&&nume%deno==0)
       {
           cout << nume/deno << endl ;
       }
       else if(nume<deno&&deno%nume==0)
       {
           if(nume<0)
           {
               cout << "-1" << '/' << deno << endl ;
           }
           else
           cout << '1' << '/' << deno << endl ;
       }
       else
      {
       cout << nume << '/' << deno << endl ;
      }
}

void CFraction::operator>(CFraction &cp)
{
     if(nume*cp.deno>deno*cp.nume)
     {
            cout << nume << '/' << deno << "大于" << cp.nume << '/' << cp.deno << endl ;
     }
     else if(nume*cp.deno==deno*cp.nume)
     {
            cout << nume << '/' << deno << "等于" << cp.nume << '/' << cp.deno << endl ;
     }
     else
     {
            cout << nume << '/' << deno << "小于" << cp.nume << '/' << cp.deno << endl ;
     }
}

void CFraction::operator<(CFraction &cp)
{
     if(nume*cp.deno>deno*cp.nume)
     {
            cout << nume << '/' << deno << "大于" << cp.nume << '/' << cp.deno << endl ;
     }
     else if(nume*cp.deno==deno*cp.nume)
     {
            cout << nume << '/' << deno << "等于" << cp.nume << '/' << cp.deno << endl ;
     }
     else
     {
            cout << nume << '/' << deno << "小于" << cp.nume << '/' << cp.deno << endl ;
     }
}

void CFraction::operator-()
{
   nume = -nume ;
}

int main()
{
    CFraction rt(1,2) ;
    CFraction ra(2,3) ;
    CFraction d = rt + ra ;
    cout << "1/2 + 2/3 = ";
    d.print() ;
    cout << "1/2 - 2/3 = ";
    d = rt - ra ;
    d.print() ;
    d = rt * ra ;
    cout << "1/2 * 2/3 = ";
    d.print() ;
    d = rt / ra ;
    cout << "1/2 / 2/3 = ";
    d.print() ;
    rt > ra ;
    -rt ;
    cout << "1/2取反:" ;
    rt.print() ;
    return 0 ;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: