好好学数据结构! 2023-04-23 00:26 采纳率: 73.1%
浏览 24

设计有理数类,用运算符重载实现各种功能

1
定义一个有理数类。一个有理数类是一个可以表示成两个整数相除的数,如1/2、2/3、4/5。一个有理数类有两个整数成员表示:分子和分母。要求实现以下功能,每项10分:
(1)定义合适的构造函数完成有理数初始化。
(2)能以“1/2”这种样式输出有理数。
(3)重载运算符+,实现两个有理数的加法:a/b+c/d=(ad+bc)/(bd)(4)重载运算符-,实现两个有理数的减法:a/b-c/d=(ad-bc)/(bd)(5)重载运算符,实现两个有理数的乘法:(a/b)(c/d)=(ac)/(bd)(6)重载运算符/,实现两个有理数的除法: (a/b)/(c/d)=(ad)/(cb)(7)重载运算符==,判断两个有理数是否相等
(8)重载运算符>,判断两个有理数的大小(9)重载运算符~,求有理数的相反数;(10)重载运算符!,求有理数的倒数。

#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
class rational
{
    public:
    rational(){int m=1;int z=0;}
    rational operator +(rational t);
    rational operator -(rational t);
    rational operator *(rational t);
     rational operator /(rational t);
     rational operator ==(rational t);
     rational operator >(rational t);
     rational operator ~();
     rational operator !();
    void out();
    void normalize();    
    private:
    int m,z;//分母,分子
};
rational::rational(int m,int z)
{
    num=n;
    denom=z;
    normalize();
}
void rational::normalize()
{
    int i=2;
    while (i<=m&&i<=z)
    {
        if(m%i==0&&z%i==0)
        {
            m=m/i;
            z=z/i;
        }
        else
            i++;
    }
}
void rational::out()
{
    cout<<"输出结果";
    if(z=0)
    cout<<"0"<<endl;
    else if(m=1)
    cout<<z<<endl;
    else
    cout<<z<<"/"<<m<<endl;
}
rational rational::operator +(rational t);{
    rational s;
    s.m=m*t.m;
    s.z=z*t.m+m*t.z;
    return s;
}
rational rational::operator-(rational t){
    rational s;
    s.m=m*t.m;
    s.z=z*t.m-m*t.z;
    return s;
}
rational rational::operator*(rational t){
    rational s;
    s.m=m*t.m;
    s.z=z*t.z;
    return s;    
    }
rational rational::operator/(rational t){
    rational s;
    s.m=m*t.z;
    s.z=z*t.m;
    return s;    
}
/*int rational::operator==(rational t){
    t.z=t.z*m;//传入的数据t通分后的分子 
    z=t.m*z;
    if(t.z==z)
    return 1;
    else
    return 0;
}
int rational::operator>(rational t){
    t.z=t.z*m;
    z=t.m*z;
    if(t.z>z)//传入的数据大于已有数据 
    return 1;
    else
    return 0;
}
void rational::operator~(rational t){
    t.z=-1*t.z;
    return t;
}
void rational::operator!(rational t){
    z=t.m;
    m=t.z;
}*/

int main() {
    rational r,l;//定义有理数
    cout<<"输入第一个有理数"<<endl;
    int a,b;
    rational r(a,b);
    cin>>a>>b;
    cout<<"输入第二个有理数"<<endl; 
    int c,d;
    rational l(c,d);
    cin>>c>>d;
    rational m;
    m=r+l;//加法 
    m.normalize();
    cout<<"相加:" 
    m.out();//输出结果
     m=r-l;//减法
    m.normalize(); 
    cout<<"相减:"
    m.out();//输出结果
    m=r*l;//乘法
    m.normalize(); 
    cout<<"相乘:"
    m.out();//输出结果
    m=r/l;//除法
    m.normalize(); 
    cout<<"相除:"
    m.out();//输出结果
    return 0;//结束程序
}

不知道为啥报错,有人解答一下吗

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-23 13:36
    关注
    • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/726349
    • 以下回答由chatgpt基于相关博客总结生成:

      很抱歉,您没有具体描述遇到的问题,无法提供解决方案。请提供更多细节信息,谢谢!

    评论

报告相同问题?

问题事件

  • 创建了问题 4月23日

悬赏问题

  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥30 求解达问题(有红包)