#include <iostream>
using namespace std;
//program skracajacy ulamki
class Liczba{
int licznik;
int mianownik;
int NWD(int a,int b); //metoda najwiekszy wspolny dzielnik
public:
Liczba(int l=0,int m=1); //konstruktor
void show(); //metoda pokazujaca liczby
Liczba& dodaj(const Liczba &A);
static Liczba dodaj(const Liczba &A,const Liczba &B);
friend Liczba operator+(const Liczba &A,const Liczba &B);
friend Liczba operator-(const Liczba &A,const Liczba &B);
friend Liczba operator*(const Liczba &A,const Liczba &B);
friend Liczba operator/(const Liczba &A,const Liczba &B);
};
int main()
{
Liczba nw1(4,5),nw2(1,2);
Liczba nw3=nw1.dodaj(nw2);
nw3.show();
cout<<endl;
Liczba nw4 = Liczba::dodaj(nw1,nw2);
nw4.show();
cout<<endl;
Liczba nw5=nw1+nw2;
nw5.show();
cout<<endl;
Liczba nw6=nw1-nw2;
nw6.show();
cout<<endl;
Liczba nw7=nw1*nw2;
nw7.show();
cout<<endl;
Liczba nw8=nw1/nw2;
nw8.show();
// ostream& operator<<(ostream &str,const Liczba&nw1){
//....
// return str;
// }
return 0;
}
//Metody prywatne
int Liczba::NWD(int a,int b) {
if(a<0){a=-a;}
if(b<0){b=-b;}
while(a!=b) {
if(a > b) a = a - b;
else b = b - a;
}
return a;
}
//Metody publiczne
Liczba::Liczba(int l, int m) {
if(m==0) {
cerr<<".....";
throw "Blad";
}
if(l==0) {
licznik=0;
mianownik=1;
return;
}
if(m<0) {
l = -l;
m = -m;
}
int c=NWD(l,m);
licznik=l/c;
mianownik=m/c;
}
void Liczba::show() {
cout<<licznik<<"/"<<mianownik;
}
Liczba& Liczba::dodaj(const Liczba &A) {
licznik = licznik*A.mianownik + A.licznik*mianownik;
mianownik = mianownik*A.mianownik;
return *this;
}
Liczba Liczba::dodaj(const Liczba &A,const Liczba &B) {
return Liczba(A.licznik*B.mianownik+B.licznik*A.mianownik,A.mianownik*B.mianownik);
}
Liczba operator+(const Liczba &A,const Liczba &B){
return Liczba(A.licznik*B.mianownik+B.licznik*A.mianownik,A.mianownik*B.mianownik);
}
Liczba operator-(const Liczba &A,const Liczba &B){
return Liczba(A.licznik*B.mianownik-B.licznik*A.mianownik,A.mianownik*B.mianownik);
}
Liczba operator*(const Liczba &A,const Liczba &B){
return Liczba(A.licznik*B.licznik,A.mianownik*B.mianownik);
}
Liczba operator/(const Liczba &A,const Liczba &B){
return Liczba(A.licznik*B.mianownik,A.mianownik*B.licznik);
}
Cześć, mógłby mi ktoś wyjaśnić dlaczego po wywołaniu Liczba nw3=nw1.dodaj(nw2); nw3.show(); W innych wynikach wyświetlają mi się śmieci a gdy tego nie wywołam wszystko jest ok ?
Z góry dzięki za pomoc