Cześć, do klasy Fraction dopisałem przeciążenia operatorów umożliwiające operacje na ułamkach (dodawanie, mnożenie, dzielenie, odejmowanie, rzutowanie na double, porównywanie), lecz niestety jeszcze do końca nie orientuję się w tym zagadnieniu i program nie działa. Czy mógłby ktoś rzucić okiem na kod (przeciążenie operatorów), aby znaleźć ewentualne błędy? Z góry dzięki!
#include <iostream>
class Fraction {
int licznik;
int mianownik;
public:
Fraction(int licz, int mian) {
if (mian != 0) {
licznik = licz;
mianownik = mian;
if (mianownik < 0) {
licznik *= (-1);
mianownik *= (-1);
}
} else {
std::cout << "Mianownik nie moze byc rowny 0 !!";
exit(0);
}
}
Fraction(const Fraction & f1) {
licznik = f1.licznik;
mianownik = f1.mianownik;
}
int getLicznik() {
return licznik;
}
int getMianownik() {
return mianownik;
}
void setLicznik(int x) {
licznik = x;
}
void setMianownik(int y) {
if (y != 0) {
mianownik = y;
} else {
std::cout << "0 nie moze byc w mianowniku!" << std::endl;
exit(0);
}
}
void simplify(int a, int b) {
while (a != b)
if (a > b) {
a -= b;
}
else {
b -= a;
}
licznik /= a;
mianownik /= b;
}
void wypisz() {
std::cout << "Podany ulamek to: " << licznik << "/" << mianownik << std::endl;
}
float toFloat() {
float dziesietny;
dziesietny = float(licznik) / float(mianownik);
return dziesietny;
}
// Dodawanie
Fraction operator+(Fraction fraction) {
Fraction resultFraction;
if (this->mianownik == fraction.getMianownik()) {
resultFraction.setLicznik(this->licznik + fraction.getLicznik());
resultFraction.setMianownik(this->mianownik);
} else {
resultFraction.setLicznik((this->licznik * fraction.getMianownik()) + (fraction.getLicznik() * this->mianownik));
resultFraction.setMianownik(this->mianownik * fraction.getMianownik());
}
return resultFraction;
}
// Odejmowanie
Fraction operator-(Fraction fraction) {
Fraction resultFraction;
if (this->mianownik == fraction.getMianownik()) {
resultFraction.setLicznik(this->licznik - fraction.getLicznik());
resultFraction.setMianownik(this->mianownik);
} else {
resultFraction.setLicznik((this->licznik * fraction.getMianownik()) - (fraction.getLicznik() * this->mianownik));
resultFraction.setMianownik(this->mianownik * fraction.getMianownik());
}
return resultFraction;
}
// Mnozenie
Fraction operator*(Fraction fraction) {
Fraction resultFraction;
resultFraction.setLicznik(this->licznik * fraction.getLicznik());
resultFraction.setMianownik(this->mianownik * fraction.getMianownik());
return resultFraction;
}
// Dzielenie
Fraction operator/(Fraction fraction) {
Fraction resultFraction;
resultFraction.setMianownik(this->mianownik * fraction.getLicznik());
resultFraction.setLicznik(this->licznik * fraction.getMianownik());
return resultFraction;
}
// Rzutowanie na double
Fraction(int licznik,int mianownik)
{
this.licznik = (double)licznik;
this.mianownik = (double)mianownik;
}
// Porownywanie ulamkow
bool Fraction operator==(Fraction fraction) {
return (this->licznik * fraction.getMianownik()) == (fraction.getLicznik() * this->mianownik);
}
};
int main() {
return 0;
}