C++—关于运算符重载

· 运算符重载

    运算符重载就是对已知的运算符重新进行定义,使其据用心的功能,处理新的数据类型。

· 格式

    函数类型 operator 运算符名称 (参数列表)

    {

        <函数体>;    

    }    

· 注意事项

    (1)“.”、“.*”、“::”、“sizeof”、“?:”这五个运算符不可以重载;

    (2)重载不能改变运算符的操作数个数、不能改变其优先级别、不能改变其结合性;

    (3)重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少有一个是类对象或者是类对象的引用;

· 利用运算符重载实现有理数四则运算

#include <iostream>
#include <string>
#include <stdlib.h>

class Rational
{
public:
    Rational(int nume,int deno);
    Rational operator+(Rational rhs);
    Rational operator-(Rational rhs);
    Rational operator*(Rational rhs);
    Rational operator/(Rational rhs);
    void print();           //打印
    void simplify();    //对分子分母进行简化处理
private:

    int numer;
    int denom;

};

Rational::Rational(int nume,int deno)
{
    numer=nume;
    denom=deno;
}

Rational Rational::operator+(Rational rhs)
{
    int a=numer;
    int b=denom;
    int c=rhs.numer;
    int d=rhs.denom;

    int e=a*d+c*b;
    int f=b*d;
    return Rational(e,f);
}

Rational Rational::operator-(Rational rhs)
{
    rhs.numer=-rhs.numer;
    return operator+(rhs);
}

Rational Rational::operator*(Rational rhs)
{
    int a=numer*rhs.numer;
    int b=denom*rhs.denom;

    return Rational(a,b);
}

Rational Rational::operator/(Rational rhs)
{
    int r=rhs.numer;
    rhs.numer=rhs.denom;
    rhs.denom=r;

    return operator*(rhs);
}

void Rational::print()
{
    if(numer%denom==0)
    {
        std::cout<<numer/denom;
    }
    else
    {
        std::cout<<numer<<"/"<<denom;
    }
}
void Rational::simplify()//对分子分母进行简化处理
{
    if(denom<0)
    {
        denom=-denom;
        numer=-numer;
    }
    //对分子分母进行化简
    //欧几里得算法去掉最大公约数
    int a=abs(numer);
    int b=abs(denom);

    if(a<b)
    {
        int c=a;
        a=b;
        b=c;
    }

    while(b>0)
    {
        int r=a%b;
        a=b;
        b=r;
    }               //最大公约数为a

    numer/=a;
    denom/=a;
}

int main()
{
    Rational Rat1(1,4);
    Rational Rat2(3,6);
    Rational Rat3=Rat1+Rat2;
    Rat1.print();
    std::cout<<"+";
    Rat2.print();
    std::cout<<"=";
    Rat3.simplify();
    Rat3.print();
    std::cout<<std::endl;

    Rational Rat4=Rat1-Rat2;
    Rat1.print();
    std::cout<<"-";
    Rat2.print();
    std::cout<<"=";
    Rat4.simplify();
    Rat4.print();
    std::cout<<std::endl;

    Rational Rat5=Rat1*Rat2;
    Rat1.print();
    std::cout<<"*";
    Rat2.print();
    std::cout<<"=";
    Rat5.simplify();
    Rat5.print();
    std::cout<<std::endl;

    Rational Rat6=Rat1/Rat2;
    Rat1.print();
    std::cout<<"/";
    Rat2.print();
    std::cout<<"=";
    Rat6.simplify();
    Rat6.print();
    return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值