m0_62709464 2021-11-28 21:12 采纳率: 50%
浏览 27
已结题

每日一练哇,大家都有什么好办法呐

设计一个分数类(Fraction):数据成员包括分子(m_numerator)和分母(m_denominator),分子默认值为0,分母默认值为1。需要满足如下条件:
(1)具有分子和分母两个形参的构造函数;
(2)具有拷贝构造函数;
(3)实现计算分数值的操作;
(4)实现=运算符和*=运算符的重载;(成员函数)
(5)实现关系运算符==的重载,判断两个Fraction类是否相等;(普通函数)
(6)实现输入输出运算符的重载(友元函数);
(7)实现算术运算符/的重载,实现两个分数的除法运算(友元函数)。

  • 写回答

2条回答 默认 最新

  • 关注

    运行结果如下:

    img

    代码如下:

    #include <iostream>
    using namespace std;
    
    class Fraction
    {
    public:
        double mFz;
        double mFm;
        //构造函数
        Fraction(double fz=0,double fm=1){mFz=fz,mFm =fm;}
        //拷贝构造函数
        Fraction(Fraction &c){mFm=c.mFm;mFz=c.mFz;}
        //计算分数值
        double value()
        {
            if(mFm!=0) 
                return mFz/mFm; 
            else 
                return 0;
        }
        //
        Fraction operator =(const Fraction c)
        {
            mFm=c.mFm;
            mFz=c.mFz;
            return *this;
        }
        Fraction operator *=(const Fraction c)
        {
            mFz *= c.mFz;
            mFm *= c.mFm;
            return *this;
        }
    
        bool operator ==(Fraction &c)
        {
            if(this->value() == c.value())
                return true;
            if(mFz == c.mFz && mFm==c.mFm)
                return true;
            else
                return false;
        }
        friend ostream & operator<<( ostream & os,const Fraction & c);
        friend istream & operator>>( istream & is,Fraction & c);
    
        Fraction  operator /(const Fraction b)
        {
            Fraction c;
            c.mFz = mFz*b.mFz;
            c.mFm = mFm*b.mFm;
            return c;
        }
    };
    
    ostream & operator<<( ostream & os,const Fraction & c)
    {
        os <<"("<< c.mFz << "/" << c.mFm<<")" ;
        return os;
    }
    
    istream & operator>>(istream &is,Fraction &c)
    {
        char ch;
        is >> c.mFz >> ch >> c.mFm;
        return is;
    }
    
    int main()
    {
        Fraction a(2,3);
        Fraction b(4,5);
        cout << "a="<<a<<endl;
        cout <<"b="<<b<<endl;
        Fraction c = a; //拷贝构造函数
        cout << "c="<<c <<endl; //显示c
        c *= b;
        cout <<"c*=b后  c="<< c<<endl; //显示乘以b后的数
        if (c==b)
        {
            cout <<c<< "等于"<<b<<endl;
        }else
            cout << c<<"不等于"<<b<<endl;
    
    
        Fraction d;
        cout << "请输入一个分数:";
        cin >> d; //输入d
        cout << d<<endl; //输出
    
        Fraction e = a/d;
        cout <<a<<"/"<<d <<"="<<e<<endl;
    
    
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月6日
  • 已采纳回答 11月28日
  • 创建了问题 11月28日

悬赏问题

  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决