c++分数类的简单实现

#include <iostream>
using namespace std;
int gcd(int x, int y){
    return x%y==0?y:gcd(y,x%y);
}
class Fraction
{
    int num, den;
public:
    Fraction(int x,int y=1):num(x),den(y){}
    operator float() {return 1.0*num/den;}
    Fraction &operator *(const Fraction& val){num*=val.num;den*=val.den;}
    Fraction &operator *=(const Fraction& val){num*=val.num;den*=val.den;}
    friend ostream& operator<<(ostream&out,const Fraction&val)
    {
        int t = gcd(val.num,val.den);
        out<<(val.num)/t<<'/'<<val.den/t;
        return out;
    }
    Fraction &operator /(const Fraction& val){num*=val.den;den*=val.num;}
    Fraction &operator /=(const Fraction& val){num*=val.den;den*=val.num;}

};

int main() {
    int a,b,c;
    cin >> a >> b >> c;
    Fraction f(a, b), g(c);
    f *= g;
    cout << f << endl;
    f /= g;
    cout << f << endl;
    f = f * f;
    cout << f << endl;
    f = f / g;
    cout << f << endl;
    cout << (float) f << endl;
    return 0;
}

上面用到了运算符重载,强转定义,友元函数,默认初始值。

猜你喜欢

转载自blog.csdn.net/rubikchen/article/details/89645392