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

klasy - pytanie teoretyczne

Ostatnio zmodyfikowano 2009-11-07 23:17
Autor Wiadomość
dmx81
Temat założony przez niniejszego użytkownika
klasy - pytanie teoretyczne
» 2009-11-07 18:29:58
chcialbym przejsc do nastepnego etapu - czyli opanowac klasy.
takie pytanie na poczatek - kiedy stosowac klasy, a kiedy np struktury, czy to przychodzi poprostu z czasem i nabiera sie "wyczucia", czy raczej jest szczegolny powod, dla ktorego powinno stosowac sie jedno a nie drugie

po drugie, ktore zmienne dawac jako private, a ktore jako public (rozumiem co znaczy ze private lub public, ale nie za bardzo wiem, jaki szczegolny powod, aby byly np private) - dotychczas nie bylo potrzeby ukrywania ich.

czytajac rozne pozycje w literaturze o klasach, doszedlem do tego, ze klasy w sumie sa po to, aby posegregowac osobno dane dla poszczegolnych obiektow - czyli zmienne, funkcje itd - dlatego tez czesto napisane jest, ze sluza do programowania zorientowanego obiektowo, jednak i tak prosilbym o odpowiedz, w miare prosta jesli mozna, czyli prostymi slowami :) dzieki
P-11362
DejaVu
» 2009-11-07 18:41:31
Hm...
C/C++
class CKalkulator
{
private:
    double m_fWynik;
   
public:
    CKalkulator();
    void dodaj( double fLiczba );
    void odejmij( double fLiczba );
    void pomnoz( double fLiczba );
    double wynik();
   
}; //class CKalkulator

//... (implementacja metod)

//...
CKalkulator liczydlo;
liczydlo.dodaj( 13 );
liczydlo.pomnoz( 33 );
liczydlo.odejmij( 321 );
std::cout << liczydlo.wynik() << std::endl;
W skrócie: klasy są po to, żeby zamykać różne funkcjonalności w paczki. Obsługa paczek powinna się odbywać tylko i wyłącznie za pośrednictwem metod klasy. Nie ma być możliwości modyfikacji zmiennej m_fWynik spoza klasy, więc ma być prywatna/chroniona.

Inaczej można też wytłumaczyć tak: mówisz koledze zrób mi klasę, która będzie np. zwracała listę katalogów na dysku w danym katalogu. Twój kolega to napisze i Ty jako 'użytkownik' tej klasy nie musisz zrobić nic więcej poza wywołaniem metody z klasy, którą dostałeś. Cały mechanizm obsługi jest przykryty, więc niczego nie popsujesz.
P-11365
dmx81
Temat założony przez niniejszego użytkownika
» 2009-11-07 18:59:22
ok, dzieki za szybka odpowiedz, czyli ogolnie chodzi o usprawnienie w pisaniu kodu - dzieki podzialowi na klasy, czyli jakby gotowe klocki, ktore sie sklada w calosc, a dzieki chronieniu przez private nikt nie popsuje nic w innym z "klockow" o ile nie zacznie grzebac w samej klasie :) ok biore sie za trening - poki co chyba bede umieszczal wszystkie zmienne jako private, a jako public funkcje, dzieki ktorym bede mogl je modyfikowac z poziomu programu
P-11367
dmx81
Temat założony przez niniejszego użytkownika
» 2009-11-07 19:13:35
czy dodawanie literek do zmiennych i innych nazw to jest standard, ktorego warto sie od razu nauczyc i przyswoic? czy to zalezy tylko od programisty, aby pomoc sobie w oznaczeniu typu przechowywania danych przez zmienna...

CKalkulator
m_fWynik
fLiczba

P-11370
DejaVu
» 2009-11-07 19:18:43
m_... - zmienna klasy (member)
C... - klasa (Class)
I... - interfejs klasy (Interface)
R... - struktura (Record)

Standard... nie wiem, może to jakiś jest, ale raczej to widzimisie programisty jak sobie nazywa wszystko w kodzie.
P-11373
Elaine
» 2009-11-07 19:33:31
A to f na przedzie to notacja węgierska, czyli sposób nazywania zmiennych wymyślony albo przez skończonego buca albo dla żartu, który okazał się być ulubioną bronią ludzi z Microsoftu w walce z tymi, którzy chcą używać WinAPI.
P-11378
dmx81
Temat założony przez niniejszego użytkownika
» 2009-11-07 21:56:17
jak wyglada dynamiczne przydzielanie pamieci w klasach?
jesli uzyje new dla klasy, czy "powielone" zostana zmienne, czy rowniez funkcje i wszystko wewnatrz klasy? bo chyba potrzebne beda tylko nowe zmienne, przykladowo imie i nazwisko dla obiektu KTOS klasy OSOBA, czyli OSOBA* KTOS=new OSOBA
chyba nie potrzebne byloby kopiowanie wszytskich funkcji pobierajacych wartosci ze zmiennych prywatnych badz je tam zapisujacych - no chyba, ze kompilator to wie,... ale ja nie, dlatego chcialem zapytac
P-11381
Elaine
» 2009-11-07 22:06:15
Kod jest jeden - metoda to po stronie maszynówki zwykła funkcja, która jako dodatkowy argument przyjmuje this. Czyli kompilator coś takiego:
foo.bar( 11, 42 );
zrobi sobie (ofc nie oczekuj, że to się skompiluje :>):
CFoo__bar( & foo, 11, 42 );
Dzięki temu żadnego powielania kodu nie ma, dwa obiekty jednej klasy mają wspólne metody ale różne pola.
P-11382
« 1 » 2
  Strona 1 z 2 Następna strona