2. Tört osztály

Czirkos Zoltán · 2019.02.27.

Tört osztály, operátorok definiálása

#include <iostream>

/* legnagyobb közös osztó, lásd bsz1 */
int gcd(int a, int b) {
    while (b != 0) {
        if (a <= b) {
            b = b-a;
        } else {
            a = a-b;
        }
    }
    return a;
}

/* tort.h */
class Tort {
  private:
    int szaml;
    int nev;

  public:
    Tort() {
        szaml = 0;
        nev = 1;
    }
    Tort(int szaml, int nev);
    int get_szaml() const {
        return szaml;
    }
    int get_nev() const {
        return nev;
    }
};

/* tort.cpp */
Tort::Tort(int szaml, int nev) {
    int gcd;
    gcd = ::gcd(szaml, nev);
    this->szaml = szaml/gcd;
    this->nev = nev/gcd;
}

Tort operator+(Tort a, Tort b) {
    int szaml = a.get_szaml() * b.get_nev() + b.get_szaml() * a.get_nev();
    int nev = a.get_nev() * b.get_nev();
    return Tort(szaml, nev);
}

std::ostream & operator<<(std::ostream & os, Tort t) {
    os << t.get_szaml() << '/' << t.get_nev();
    return os;
}

std::istream & operator>>(std::istream & is, Tort & t) {
    int szaml, nev;
    char c;
    is >> szaml >> c >> nev;
    t = Tort(szaml, nev);
    return is;
}

/* main.cpp */
int main() {
    Tort a, b, c;

    /* operator<<(std::cin, a); */
    std::cin >> a >> b;

    /* operator+(a, b) */
    c = a+b;

    /* operator<<(std::cout, a) */
    std::cout << a << '+' << b << " = " << c;

    return 0;
}