第八周 项目三 (1)分数类中的运算符重载

【项目3-分数类中的运算符重载】

  (1)实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。可以在第4周分数类代码的基础上开始工作。

[cpp] view
plain
copyprint?

  1. class CFraction
  2. {
  3. private:
  4. int nume;  // 分子
  5. int deno;  // 分母
  6. public:
  7. //构造函数及运算符重载的函数声明
  8. };
  9. //重载函数的实现及用于测试的main()函数
/*
*Copyright (c)2014,烟台大学计算机与控制工程学院
*All rights reserved.
*dood luck
*文件名称:d.cpp
*作    者:张旺华
*完成日期:2015年5月7日
*版 本 号:v1.0
*
*/
#include <iostream>
using namespace std;
class CFraction
{
private:
    int nume;  // 分子
    int deno;  // 分母
public:
    //构造函数及运算符重载的函数声明
    CFraction(int n=1,int d=1);
    void setCFraction(int n,int d);
    void display();
    friend CFraction change(CFraction &c);
    CFraction operator+(CFraction &c);
    CFraction operator-(CFraction &c);
    CFraction operator*(CFraction &c);
    CFraction operator/(CFraction &c);
    bool operator > (CFraction &t);
    bool operator < (CFraction &t);
    bool operator >= (CFraction &t);
    bool operator <= (CFraction &t);
    bool operator == (CFraction &t);
    bool operator != (CFraction &t);
    //赋值运算符的重载
    CFraction operator+=(CFraction &c);
    CFraction operator-=(CFraction &c);
    CFraction operator*=(CFraction &c);
    CFraction operator/=(CFraction &c);
};
int gcd(int a,int b)
{
return a%b==0?b:gcd(b,a%b);
}
CFraction::CFraction(int n,int d)
{
    nume=n;
    deno=d;
}
void CFraction::setCFraction(int n,int d)
{
    nume=n;
    deno=d;
}
CFraction change(CFraction &c)
{
    int t,a,b;
    a=c.nume;
    b=c.deno;
    t=gcd(a,b);
    c.nume/=t;
    c.deno/=t;
    return c;
}
void CFraction::display()
{
    if(nume!=0&&deno!=0)
    cout<<nume<<"/"<<deno<<endl;
    else if(nume==0&&deno!=0)
        cout<<"0"<<endl;
    else
        cout<<"error"<<endl;

}
CFraction CFraction::operator+(CFraction &c)
{
    CFraction p;
    p.nume=nume*c.deno+deno*c.nume;
    p.deno=deno*c.deno;
    return change(p);
}
CFraction CFraction::operator-(CFraction &c)
{
    CFraction p;
    p.nume=nume*c.deno-deno*c.nume;
    p.deno=deno*c.deno;
    return change(p);
}
CFraction CFraction::operator*(CFraction &c)
{
    CFraction p;
    p.nume=nume*c.nume;
    p.deno=deno*c.deno;
    return change(p);
}
CFraction CFraction::operator/(CFraction &c)
{
    CFraction p;
    p.nume=nume*c.deno;
    p.deno=deno*c.nume;
    return change(p);
}
bool CFraction::operator > (CFraction &t)
{
    return (nume*t.deno>t.nume*deno);
}
bool CFraction::operator < (CFraction &t)
{
    return (nume*t.deno<t.nume*deno);
}
bool CFraction::operator >= (CFraction &t)
{
    return !(nume*t.deno<t.nume*deno);
}
bool CFraction::operator <= (CFraction &t)
{
    return !(nume*t.deno>t.nume*deno);
}
bool CFraction::operator == (CFraction &t)
{
    return !(nume*t.deno>t.nume*deno||nume*t.deno<t.nume*deno);
}
bool CFraction::operator != (CFraction &t)
{
    return (nume*t.deno>t.nume*deno||nume*t.deno<t.nume*deno);
}

//赋值运算符的重载
CFraction CFraction::operator+=(CFraction &c)
{
    nume=nume*c.deno+deno*c.nume;
    deno=deno*c.deno;
    return change(*this);
}
CFraction CFraction::operator-=(CFraction &c)
{
    nume=nume*c.deno-deno*c.nume;
    deno=deno*c.deno;
    return change(*this);
}
CFraction CFraction::operator*=(CFraction &c)
{
    nume=nume*c.nume;
    deno=deno*c.deno;
    return change(*this);
}
CFraction CFraction::operator/=(CFraction &c)
{
    nume=nume*c.deno;
    deno=deno*c.nume;
    return change(*this);
}
int main()
{
    CFraction t1(7,9),t2(11,9),t;
    cout<<"t1为:";
    t1.display();
    cout<<"t2为:";
    t2.display();
    cout<<"下面比较两个时间大小:\n";
    if (t1>t2) cout<<"t1>t2"<<endl;
    if (t1<t2) cout<<"t1<t2"<<endl;
    if (t1==t2) cout<<"t1=t2"<<endl;
    if (t1!=t2) cout<<"t1≠t2"<<endl;
    if (t1>=t2) cout<<"t1≥t2"<<endl;
    if (t1<=t2) cout<<"t1≤t2"<<endl;

    t=t1+t2;
    t.display();
    t=t1-t2;
    t.display();
    t=t1*t2;
    t.display();
    t=t1/t2;
    t.display();
    t1+=t2;
    t1.display();
    t1-=t2;
    t1.display();
    t1*=t2;
    t1.display();
    t1/=t2;
    t1.display();
    return 0;
}

运行结果:

学习心得:正在追赶中,好好加油,但不要图块。

时间: 2024-10-01 20:08:51

第八周 项目三 (1)分数类中的运算符重载的相关文章

第八周项目1-实现复数类中的运算符重载

(1)请用类的成员函数,定义复数类重载运算符+.-.*./,使之能用于复数的加减乘除. /* * Copyright (c) 2015,烟台大学计算机学院 * All right reserved. * 作者:邵帅 * 文件:Demo.cpp * 完成时间:2015年04月29日 * 版本号:v1.0 */ #include <iostream> using namespace std; class Complex { public: Complex(){real=0;imag=0;} Com

第八周项目一 实现复数类中的运算符重载

(1)请用类的成员函数,定义复数类重载运算符+.-.*./,使之能用于复数的加减乘除. #include <iostream> using namespace std; class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r; imag=i;} Complex operator+(const Complex &c2); Complex operator-(const Comp

第八周项目三-分数类中的运算符重载

实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简).比较(6种关系)的运算.可以在第4周分数类代码的基础上开始工作. /* * Copyright (c) 2015,烟台大学计算机学院 * All right reserved. * 作者:赵嵩 * 文件:Demo.cpp * 完成时间:2015年05月16日 * 版本号:v1.0 */ #include <iostream> using namespace std; class CFraction { private:

第九周 项目三-分数类中的运算符重载(续)

在分数类中的运算符重载基础上 (1)定义分数的一目运算+和-,分别代表分数取正和求反,将"按位取反运算符"~重载为分数的求倒数运算. (2)定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然. <p>/*  * Copyright (c) 2015, 烟台大学计算机学院  * All rights reserved.  * 文件名称:test.cpp  * 作    者:冷基栋  * 完成日期:2

分数类中的运算符重载(续)

输入代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:sum123.cpp *作 者:林海云 *完成日期:2015年5月23日 *版 本 号:v2.0 * *问题描述:在分数类中的运算符重载基础上 (1)定义分数的一目运算+和-,分别代表分数取正和求反,将"按位取反运算符"~重载为分数的求倒数运算. (2)定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运

第八周上机实践项目3——分数类中的运算符重载(2)

(2)在(1)的基础上,实现分数类中的对象和整型数的四则运算.分数类中的对象可以和整型数进行四则运算,且运算符合交换律.例如:CFraction a(1,3),b; int i=2; 可以完成b=a+i;.同样,可以完成i+a, 45+a, a*27, 5/a等各种运算. 问题及代码 /* * Copyright (c) 2015, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:辛彬 * 完成日期:2015 年 4 月 26 日 *

第八周上机实践项目1——实现复数类中的运算符重载(3)

定义一个定义完整的类(是可以当作独立的产品发布,成为众多项目中的"基础工程").这样的类在(2)的基础上,扩展+.-.*./运算符的功能,使之能与double型数据进行运算.设Complex c; double d; c+d和d+c的结果为"将d视为实部为d的复数同c相加",其他-.*./运算符类似. 问题及代码 /* * Copyright (c) 2015, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作

项目1-实现复数类中的运算符重载 3

(3)定义一个定义完整的类(是可以当作独立的产品发布,成为众多项目中的"基础工程").这样的类在(2)的基础上,扩展+.-.*./运算符的功能,使之能与double型数据进行运算.设Complex c; double d; c+d和d+c的结果为"将d视为实部为d的复数同c相加",其他-.*./运算符类似. class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){rea

项目1-实现复数类中的运算符重载 1

(1)请用类的成员函数,定义复数类重载运算符+.-.*./,使之能用于复数的加减乘除 class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r; imag=i;} Complex operator+(const Complex &c2); Complex operator-(const Complex &c2); Complex operator*(const Complex &a