kuba_k31 napisał
Czepiacie się.
Swoją drogą, jak już mamy dzień pomocy dla nowych to może powiecie mi czym w C++ różni się public od private? To znaczy, wiem że w private umieszczam rzeczy, do ktorych uzytkownik nie ma miec dostepu poza klasa, ale nie rozumiem w jaki sposob użytkownik miałby otrzymać dostęp do rzeczy które są public? Przecież daje mu gotowy produkt, nie otrzymuje on dostępu do kodu.
To bardziej na przyszłość się ustawia, i przy tworzeniu w kilka osób. Przykład najlepszy jest:
Jeśli masz pole które trzeba przefiltrować jakąś funkcją, czyli np. masz pole dzielnik gdzie trzymasz liczbe przez ktora bedziesz dzielil. Wiadomo, ze liczba ta nie moze byc 0.
Wiec ustawiasz pole dzielnik na prywatne, i jego zmiana moze sie wtedy odbyc przez odpowiednia funkcje typu
Kod PHP:
public function setDzielnik(int nowy_dzielnik) {
if (nowy_dzielnik==0) {
//tutaj cos pokazujesz, jakis alert czy np ustawiasz go na 1, cokolwiek
} else {
this->dzielnik = nowy_dzielnik;
}
}
No i chodzi o to, że jak byś zrobił to pole publicznym, to ktoś inny mógłby za pomocą:
Kod PHP:
MojaKlasa obiekt;
obiekt.dzielnik = 0;
Co jest błędne, ale możliwe do zrobienia. W przypadku zrobienia tego pola prywatnym, nie jest to mozliwe, a jedyna mozliwosc ustawienia pola da sie zrobic poprzez setDzielnik(), ktory nigdy nie pozwoli zrobic temu polu wartosci 0.
Profit, bo nie musisz po x czasie pamietac ze ta zmienna nie moze miec wartosci 0.
Inna sprawa jest taka, ze jesli np zrobisz pole publicznym, bo nie musisz go filtrowac. To ktos inny uzywajac twojej klasy (robicie wspolnie projekt), odwoluje sie poprzez obiekt.pole;
Ale po pewnym czasie, ty stwierdziles ze pole nie moze zawierac frazy 'Wojtek', wiec robisz pole prywatnym i tworzysz mu setter, zakazujacy umiescic w nim slowa wojtek.
Wszystkie inne klasy ktore wykorzystuja twoj stary kod nie kompiluja sie, i jest duzy problem z przepisaniem wszystkich wystapien obiekt.pole na obiekt.getPole() oraz obiekt.setPole();
Profilaktycznie pola uzywa sie jako private (lub protected, do dziedziczenia) , w szczegolnych przypadkach publici :)
Zakładki