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;
}