Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

Gość Qn`ik

Programowanie

Polecane posty

Ja swoją drogą też mam pytanie. I to również związane z owym tutorialem, aczkolwiek późniejszą częścią.

Przeczytawszy rozdziały o wskaźnikach i obiektach postanowiłem napisać program, w którym mógłbym utrwalić tę wiedzę. No więc stanęło na (nie śmiać się! :P ) obiektowej wersji kółko i krzyżyk. W konsoli. Zresztą to nie jest za bardzo ważne. Mianowicie w ramach ciekawostek Xion wspomniał o singletonach. Skoro już pisałem program do nauki postanowiłem to wykorzystać, tak dla ćwiczeń. Mój kod wygląda dość w sumie podobnie:

class cGra
{private:
                 cGra() {m_obiekt= this;}; //kontruktor
         static cGra* m_obiekt;
                 static Cgracz* Gracz1; //Typy rzecz jasna zdefiniowane już wcześniej
         static Cgracz* Gracz2;
public:
       ~cGra() {delete m_obiekt; m_obiekt=NULL;} //destruktor
        static cGra* obiekt() //metoda dostępowa do obiektu
                         {if (m_obiekt==NULL) cGra();
                          return m_obiekt;};                
//i tu reszta klasy, nie ma sensu cytować

Program kompiluje się bez błędów (MS Visual C++ 2008). Problem pojawia się przy pierwszym odwołaniu:

cGra::obiekt()->Wyjasnij();//ta metoda oczywiście też została wcześniej zadeklarowana

Mianowicie dostawałem błąd

Unhandled exception at 0x004135b9 in kolko.exe: 0xC00000FD: Stack overflow.

Po prześledzeniu zjawiska w Debuggerze:

  1. Najpierw program sprawdza czy m_obiekt istnieje. Zauważa, że nie i uruchamia kontruktor.
  2. Konstruktor przypisuje wskaźnikowi m_obiekt wartość na tworzony przez siebie obiekt
  3. Program wraca do metody obiekt...
  4. Wywołuje destruktora

Starałem się wymyślić o co w tym błędzie chodzi, ale wymyślić nie mogłem. Prawdopodobnie to jakiś oczywisty błąd, ale nie za bardzo go rozumiem. Roboczo po prostu stworzyłem zwykłą, statyczną metodę, która przejmuje rolę destruktora, ale to raczej nie jest dobre rozwiązanie. Program już w całości napisałem i działa, ale mimo wszystko chciałbym wiedzieć co robię nie tak. Z góry dzięki :)

Link do komentarza
Udostępnij na innych stronach

Usunąłem to delete (w sumie to była zwykła rekurencja... Damn, ale ja jestem sprytny) Już nie dostaję wyjątku z przepełnieniem stosu, ale destruktor wywołuje się i tak... Co powoduje, że i tak m_obiekt jest NULL...

Swoją drogą: czemu nie można po prostu wszystkich metod i pól zrobić statycznymi? Wtedy nie trzeba by stosować żadnych trików z prywatnymi konstruktorami. Gorsza wydajność takiego rozwiązania czy jakie licho?

Link do komentarza
Udostępnij na innych stronach

Swoją drogą: czemu nie można po prostu wszystkich metod i pól zrobić statycznymi? Wtedy nie trzeba by stosować żadnych trików z prywatnymi konstruktorami. Gorsza wydajność takiego rozwiązania czy jakie licho?

To jest pytanie ogólne czy w związku z singletonem i Twoim przykładem?

Stuczka jest na potrzeby singletonu przecież, a normalnie robisz publiczny konstruktor i większość obiektów i metod nie jest static.

Link do komentarza
Udostępnij na innych stronach

Witam! Przepraszam za to dość nietypowe pytanie ale mam nadzieję, że choć w przybliżeniu mi odpowiecie :D. Czy w ciągu 4 lat zdążę nauczyć się bardzo dobrze PHP? Jestem w TI 1 klasa i chciałbym po szkole pracować oczywiści w zawodzie i tworzyć strony w PHP w jakiejś firmie. I mam do was pytanie czy w ciągu 4 lat nauczę się języka na tyle by móc pisać zaawansowane programy w PHP? Jeszcze raz przepraszam za takie głupie pytanie ale po to jestem na tym forum :D Pozdrówka dla wszystkich!

Link do komentarza
Udostępnij na innych stronach

1. 4 lata to góra czasu. Jeśli przysiądziesz i będziesz dużo ćwiczył, pisał jakieś bardziej zaawansowane rzeczy, to myślę, że spokojnie sobie poradzisz.

2. W PHP nie pisze się programów, tylko skrypty.

3. Ponieważ PHP to tylko skrypty wykonujące coś, to jeszcze musisz znać HTML + CSS (+java script), żeby móc strony w ogóle robić.

Link do komentarza
Udostępnij na innych stronach

Napisałem dzisiaj rano program, który zamienia liczby arabskie na rzymskie i odwrotnie rzymskie na arabskie. Problem w tym, że wyszedł mi dosyć długi kod, gdyż przekształcanie liczb arabskich na rzymskie odbywa sie w takiej postaci:

    
//odczytywanie liczby wypisywanie w tablicy rzymskich odpowiednikow i zmniejszanie liczby do 0

    while (liczba_arabska > 999)
    {
        liczba_rzymska[n]='M';
        liczba_arabska=liczba_arabska-1000;
        n++;
    }

    if (liczba_arabska <= 999 && liczba_arabska > 899)
    {
        liczba_rzymska[n]='C';
        liczba_rzymska[n+1]='M';
        liczba_arabska=liczba_arabska-900;
        n=n+2;


    ...



    while (liczba_arabska < 4 && liczba_arabska > 0)
    {
        liczba_rzymska[n]='I';
        liczba_arabska=liczba_arabska-1;
        n++;
    }

    for (i=0;i<n;i++)
    cout << liczba_rzymska[i];

I wychodzi sporo pętli. Może ktoś wpadł na lepszy sposób przekształcania liczb arabskich na rzymskie?

Link do komentarza
Udostępnij na innych stronach

Jaki program polecacie do podszkolenia się w programowaniu ?? bo jak na razie to pracujemy w szkole na basic-u(tak wiem staroć ale frajda jest :P) i chce czegoś działającego normalnie pod windowsem. a i przy okazji jaką ksiaże, strone do podszkolenia polecacie do polecanego programy. z góry dzieki :)

Link do komentarza
Udostępnij na innych stronach

Książki do basica Ci nie polecę bo nie znam. A jeśli chodzi o aplikację, to coś bazodanowego powinno nieźle Cię wciągnąć. Albo coś prostszego na plikach, albo pełną gębą łączenie się z serwerem bazy danych (lokalnie postawionym) albo przez odbc albo bezpośrednio. Czyli jakieś zarządzanie userami, przypisywanie uprawnień do różnych części (funkcji) aplikacji itd. Np system biblioteczny. Dodawanie i usuwanie książek, rezerwacje, wypożyczenia, wyszukiwanie. Kilka klas użytkowników (admin, bibliotekarz, czytelnik itd). Wszystko zależy od tego, jak bardzo chcesz temat rozwinąć.

Jeśli znasz basica, to mógłbyś spróbować sił z VB.NET.

Jak chcesz zaszaleć, to sobie o UML poczytaj. Pouczysz się projektowania aplikacji, przemyślisz koncepcję zanim coś napiszesz, rozpiszesz sobie wymagania systemu...

Link do komentarza
Udostępnij na innych stronach

wies.niak,a czytałeś może "Synfonię C++ Standard"?

Będzie pasowała do programowania w MS Visual C++ 2008?

A i jakie języki trzeba znać żeby iść później na studia?(Mam dopiero 12 latek...)

A i polecam silnik graficzny i do gier OGRE!Używa się w nim języka C++,zrobiono tam wiele [ciach] gier!

Choć jeszcze nie znam C++,to wymyśliłem grę,Wizards & Warriors IV:The unofficial sequel!

Mam jeszcze pegasusa z dyskietką Wizards & Warriors III,gra jest wyśmienita,jak się nauczę C++ to podrasuję tak,że będzie [ciach] gierka,ehhh...

Poczytaj regulamin. Następnym razem będzie +20%.

[wies.niak]

Link do komentarza
Udostępnij na innych stronach

Czytałem, bardzo dobra. Często do niej wracam i się wspomagam, bo nie wyryłem wszystkiego na pamięć :-) Będzie. MSVC to świetny kompilator.

Żeby iść na studia (informatyczne) trzeba znać język polski i angielski w stopniu takim, by być w stanie czytać różne dokumentacje i inne informatyczne rzeczy po angielsku. Chyba, że wybierzesz makrokierunek (nauka w języku angielskim), to wtedy koniecznie trzeba bardzo dobrze znać angielski.

A jeśli pytasz o języki programowania, to nie trzeba znać żadnego - nauczą Cię. Oczywiście znajomość C / C++ / C# / java czy innego języka da Ci przewagę wiedzy i doświadczenia, a więc uprości Ci życie, bo nie będziesz musiał poświęcać czasu na naukę znanych Ci rzeczy. Poza tym znajomość jednego czy więcej języków sprawia, że kolejne przyswaja się znacznie szybciej i prościej.

Link do komentarza
Udostępnij na innych stronach

A ja mam takie pytanie. Czy warto sie uczyc asemblera? Otoz niedlugo bede sie wybieral na studia informatyczne, i tak jak zostalo juz powiedziane, wiem, ze znajomosc jezykow programowania nie jest tam koniecznie wymagana, ale na pewno pomocna. No a ze bedac teraz w technikum na specjalizacji troszke programujemy, ostatnio wlasnie skonczylismy tak oglednie asemblera, to zastanawiam sie czy warto sie nim bardziej zainteresowac, czy nie lepiej przezucic sie od razu na C czy jakiegos innego Pascala (w najblizszym czasie bedziemy tez miec cos z Bascoma). Mam w domu ksiazke do asemblera, troszke sie bawilem z symulatorem jagoda. Nie wiem jednak czy poswiecac wiecej uwagi na ten jezyk, czy olac i wziasc sie za cos innego, jakby bardziej popularnego. Z gory dzieki za odp.

Link do komentarza
Udostępnij na innych stronach

Moim zdaniem lepiej wziąć się za coś wysokopoziomowego. Asembler jest przydatny przy pisaniu kawałków kodu realizujących dużą ilość obliczeń, które muszą wykonać się jak najszybciej, wtedy faktycznie widać jego zalety. Ewentualnie jak się keyloggera pisze, to fajnie, żeby był dość mały :D

Natomiast w wielu wypadkach jest to obojętne, czy obliczenia potrwają 5 czy 10 minut, więc nie ma sensu sobie utrudniać i marnować czasu na dłubaninę.

Link do komentarza
Udostępnij na innych stronach

Gdzieś kiedyś przeczytałem takie coś: programowanie w pascalu to jak budowanie domu z dużych klocków. Wszystko ładnie, ale gdybyś później chciał dobudować balkon, to się nie da. W C masz małe klocki, możesz poukładać jak chcesz i będziesz zadowolony. Programowanie w asemblerze to tak, jakbyś dostał glinę na cegły :D

IMO asembler wymaga trochę więcej skupienia i dobrej pamięci, bo łatwo można się zgubić, jeśli pisze się coś większego. Języki wysokiego poziomu są bardziej intuicyjne i wygodniejsze w użyciu, a przede wszystkim napisanie tego samego zajmuje w nich znacznie mniej czasu.

Link do komentarza
Udostępnij na innych stronach

A mam jeden problem.Sory że zaspamuję ale założyłem temat o jednym,takowym problemie.

Nie wiem jak się robi tekstury człowieka,broni białej/palnej,domów i wiele innych rzeczy.Szukałem w google ale to nic nie daje...a bardzo potrzebuję tej wiedzy,żebym mógł teksturować w Blenderze.

A propos Blendera-można tam pisać skrypty w C++ czy tylko w Pythonie?

Link do komentarza
Udostępnij na innych stronach

Gdzieś kiedyś przeczytałem takie coś: programowanie w pascalu to jak budowanie domu z dużych klocków. Wszystko ładnie, ale gdybyś później chciał dobudować balkon, to się nie da.
Ja tez ten tekst kojarze, ale ja pamietam, ze tam byla mowa o visual basicu. W basicu nie da rady tworzyc nowych obiektow, mozna tylko korzystac z juz gotowych. Dlatego dom buduje sie szybko, tylko ze bez balkonow :)

A propos Blendera-można tam pisać skrypty w C++ czy tylko w Pythonie?
o ile wiem TYLKO I WYLACZNIE python.

Nie wiem jak się robi tekstury człowieka,broni białej/palnej,domów i wiele innych rzeczy.Szukałem w google ale to nic nie daje...a bardzo potrzebuję tej wiedzy,żebym mógł teksturować w Blenderze.
- nie uwazasz, ze troche nie ten temat? Moze sprobuj paint'em.
Link do komentarza
Udostępnij na innych stronach

Gość
Temat jest zablokowany i nie można w nim pisać.


  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.

×
×
  • Utwórz nowe...