Funkcja z klasy nie działa w funkcji spoza klasy
Ostatnio zmodyfikowano 2013-03-26 11:53
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. class ulamek { private: int licznik; int mianownik; (...) };
Aby mieć dostęp do zmiennych utworzyłem 4 funkcje: 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ć). void skracamy( ulamek i ) { int a = i.getLicznik(); int b = i.getMianownik(); int c; while( b != 0 ) { c = a % b; a = b; b = c; } 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. |
|
« 1 » |