【C++作业】分数类 运算符重载

本文介绍了一个分数类的设计与实现,通过运算符重载来完成分数的基本数学运算,包括加、减、乘、除,并实现了分数的输入输出功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用运算符重载,实现分数(形式a/b)的输入输出与运算。

//分数类
#include <iostream>
#include <algorithm>
using namespace std;

class Fraction{
public:
    Fraction(int denominator,int numerator):denominator(denominator),numerator(numerator){}
    friend istream& operator>> (istream &in,Fraction &f); 
    friend ostream& operator<< (ostream &out,Fraction &f); 

    Fraction operator+ (const Fraction &f1)const;
    Fraction operator- (const Fraction &f1)const;
    Fraction operator* (const Fraction &f1)const;
    Fraction operator/ (const Fraction &f1)const;
private:
    int denominator,numerator;
}; 

istream& operator>> (istream &in,Fraction &f){
    cout<< "[Enter a Fraction]: ";
    char c;
    while(in>> f.denominator >>c>> f.numerator){
        if(f.numerator == 0){//特判分子是否为零
            cout<< "Error! The numerator is 0!" <<endl; 
            cout<< "[Enter a Fraction]: ";
        }
        else break; 
    }
    return in;
}

ostream& operator<< (ostream &out,Fraction &f){
    if(f.denominator == 0)out<< 0 <<endl;
    else if(f.numerator == 1)out<< f.denominator <<endl;
    else {
        if(f.numerator < 0)//将负号提到前面
            out<< -f.denominator << "/" << -f.numerator <<endl;
        else 
            out<< f.denominator << "/" << f.numerator <<endl;
    }
    return out;
} 

Fraction Fraction::operator+ (const Fraction &f1)const{
    int den = denominator*f1.numerator + numerator*f1.denominator;
    int num = numerator*f1.numerator;
    int GCD = __gcd(den,num);
    return Fraction(den/GCD,num/GCD);//求最大公约数,化简结果
}

Fraction Fraction::operator- (const Fraction &f1)const{
    int den = denominator*f1.numerator - numerator*f1.denominator;
    int num = numerator*f1.numerator;
    int GCD = __gcd(den,num);
    return Fraction(den/GCD,num/GCD);
}

Fraction Fraction::operator* (const Fraction &f1)const{
    int den = denominator*f1.denominator;
    int num = numerator*f1.numerator;
    int GCD = __gcd(den,num);
    return Fraction(den/GCD,num/GCD);
}

Fraction Fraction::operator/ (const Fraction &f1)const{
    int den = denominator*f1.numerator;
    int num = numerator*f1.denominator;
    int GCD = __gcd(den,num);
    return Fraction(den/GCD,num/GCD);
}
int main() {
    Fraction f1(1,1),c3(1,1),c4(1,1),c5(1,1),c6(1,1);
    cin>>f1;
    cout<<"c1="<<f1;
    Fraction f2(0,0);
    cin>>f2;
    cout<<"c2="<<f2;
    c3=f1+f2;
    cout<<"c3=c1+c2="<<c3;
    c4=f1-f2;
    cout<<"c4=c1-c2="<<c4;
    c5=f1*f2;
    cout<<"c5=c1*c2="<<c5;
    c6=f1/f2;
    cout<<"c6=c1/2="<<c6;
    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值