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

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 
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"<else if(m=1)
    cout<else
    cout<"/"<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<<"输入第一个有理数"<int a,b;
    rational r(a,b);
    cin>>a>>b;
    cout<<"输入第二个有理数"<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;//结束程序
}

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

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/726349
  • 以下回答由chatgpt基于相关博客总结生成:

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