• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyjaśnienie błędu

VPS Starter Arubacloud
0 głosów
660 wizyt
pytanie zadane 26 października 2015 w C i C++ przez Iras Obywatel (1,800 p.)
#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

1 odpowiedź

+2 głosów
odpowiedź 26 października 2015 przez furas Maniak (53,800 p.)

Napisałeś funkcję która przy wywołaniu

nw1.dodaj(nw2);

jest równoważne z 

nw1 = nw1 + nw2;

//  lub

nw1 += nw2;

czyli modyfikujesz tu zawartość `nw1` co powoduje zmianę wyników w pozostałych obliczeniach.

Czy miałeś na myśli te inne wyniki pisząć, że wyświetla Ci śmieci ?

komentarz 26 października 2015 przez Iras Obywatel (1,800 p.)
tak chodziło mi o to że wyświetlało mi inne wyniki niż powinno
komentarz 26 października 2015 przez Iras Obywatel (1,800 p.)
dzięki wielkie za pomoc

Podobne pytania

0 głosów
3 odpowiedzi 266 wizyt
pytanie zadane 11 września 2015 w C i C++ przez revan95 Początkujący (270 p.)
–1 głos
1 odpowiedź 267 wizyt
pytanie zadane 30 maja 2015 w C i C++ przez Lukasz Bywalec (2,320 p.)
0 głosów
1 odpowiedź 148 wizyt

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...