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 |