Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Funkcja z klasy nie działa w funkcji spoza klasy

Ostatnio zmodyfikowano 2013-03-26 11:53
Autor Wiadomość
Luk_Jab
Temat założony przez niniejszego użytkownika
Funkcja z klasy nie działa w funkcji spoza klasy
» 2013-03-26 11:53:01
Witam, mój problem dotyczy klasy a także modyfikatorów dostępu. Jeśli chodzi o programowanie obiektowe, to cały czas uważam siebie za raczkującego, niemniej cały problem wydaje mi się banalny i nie mam pojęcia dlaczego nie działa.

Mianowicie mam klasę ułamek i 2 zmienne typu private.
C/C++
class ulamek
{
private:
    int licznik;
    int mianownik;
    (...)
};
Aby mieć dostęp do zmiennych utworzyłem 4 funkcje:
C/C++
int ulamek::getLicznik()
{
    return licznik;
}

int ulamek::getMianownik()
{
    return mianownik;
}

void ulamek::setLicznik( int l )
{
    licznik = l;
}
void ulamek::setMianownik( int m )
{
    mianownik = m;
}
Wszystko przejrzyście, prosto i nawet działa. Z tym że działa mi to jako osobne instrukcje, przykładowo obiekt.setLicznik(14) ustawi wartość licznika na 14. I wszystko git. Ale jednym z zadań które miałem wykonać jest napisanie zewnętrznej funkcji spoza klasy która skróci nam ułamki(te które można skrócić).
C/C++
void skracamy( ulamek i )
{
    int a = i.getLicznik();
    int b = i.getMianownik();
    int c;
    while( b != 0 ) {
        c = a % b;
        a = b;
        b = c;
    } // zmienna a stanowi tutaj największy wspólny dzielnik
    if( a != 1 ) {
        cout << "Skrocony ulamek: " << i.getLicznik() / a << " / " << i.getMianownik() / a << endl;
        int g = i.getLicznik() / a;
        int f = i.getMianownik() / a;
        i.setLicznik( g );
        i.setMianownik( f );
    }
}
I niby wszystko chodzi, ułamki skracalne są skracalne i dostaje ich wynik na cout'cie. Ale 2 ostatnie instrukcje, i.setLicznik i i.setMianownik w tej funkcji NIE DZIAŁAJĄ! Funkcja void skracamy zastosowana na dowolnym obiekcie wyprowadzi mi tylko wynik na cout, natomiast nie nadpisze wartości zmiennych w obiekcie. I KURDE DLACZEGO? setLicznik jako taki działa, zmienna jest typu int, na oko wszystko jest dobrze...

Oczywiście mógłbym tą funkcję napisać w inny sposób(np. użyć konstruktora) ale tak właściwie to interesuje mnie dlaczego tak prosta funkcja nie działa. Pomoże ktoś?


EDIT: Oczywiście problem był banalny i w zasadzie powinienem się wstydzić :) Argumenty do funkcji należy przekazać przez referencję :) Takie głupie niedopatrzenie.
P-79406
« 1 »
  Strona 1 z 1