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  | 
 | 
DejaVu  | 
» 2009-11-07 18:41:31 Hm... class CKalkulator { private:     double m_fWynik;      public:     CKalkulator();     void dodaj( double fLiczba );     void odejmij( double fLiczba );     void pomnoz( double fLiczba );     double wynik();      }; 
 
 
 
  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.  | 
 | 
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  | 
 | 
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
 
   | 
 | 
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.  | 
 | 
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.  | 
 | 
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  | 
 | 
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.  | 
 | 
|  « 1 »  2 |