2010-01-16 15 views
9

Ponieważ w przeszłości używałem głównie języków skryptów, ale teraz chcę przejść na poziom "wysokiej wydajności", postanowiłem nauczyć się języka C++ jakiś czas temu.Uczenie się C++, prawda?

Spojrzałem na kilka poradników dla początkujących i kupiłem podręcznik do czytania O'reilly C++ (jest naprawdę pomocny). Moim problemem jest to, że teraz znam wszystkie podstawy, ale nie jestem jeszcze dobry, aby na przykład zaprogramować bardziej skomplikowaną grę.

  • Czy muszę dostać jedną z tych grubych książek C++ do dalszej nauki?
  • Użyję głównie C++ w systemie Windows. Jakie API obok Win32 są dla mnie ważne?
  • Moim celem byłoby napisanie małego interpretera dla języka programowania, który już posiadam - udało mi się już w kilku językach skryptowych, jakiej wiedzy API/biblioteki potrzebuję w C++, aby ją napisać?

Odpowiedz

8
  1. Nie potrzebujesz grubej książki - potrzebujesz dobrej. Uzyskaj Accelerated C++, napisany przez Koeniga & Moo, dwa z oryginalnego zespołu programistów C++.

  2. Zależy od tego, co chcesz zrobić.

  3. Nie potrzebujesz niczego - możesz napisać doskonale dobry interpreter lub kompilator używając tylko biblioteki standardowej C++. Zobacz tę SO question, aby uzyskać wiele informacji w tym obszarze.

+0

Polecam również skuteczne C++ i skuteczne stl od razu. – Rick

+0

Uwielbiam cytat, jaki mają o tej książce: "Każdy, kto czyta tylko tę jedną książkę i pracuje nad przykładami i ćwiczeniami, będzie miał te same umiejętności, co wielu profesjonalnych programistów". Niestety, to nie mówi wiele. :-) – Ken

1

Zawsze uważałem, że nauka języka z książki jest dość trudna i po zapoznaniu się z podstawami należy zacząć programować. Zamiast więc pobierać grubą instrukcję, sprawdziłbym coś takiego jak http://www.cprogramming.com/tutorial.html#advanced lub po prostu google dla samouczka C++ i coś, co chciałbyś spróbować.

+3

Powinieneś unikać samouczków C++ on-line, takich jak dżuma - są one jednakowo błędne lub błędne. –

+1

@Neil: trochę mocny. Istnieją dobre punkty w kilku tutorialach, ale zgadzam się, że stosunek sygnału do szumu jest niski - lub nawet ujemny, z dużą ilością aktywnie szkodliwych sugestii. –

+0

Po prostu musisz znaleźć coś, co jest dobre. Tak samo jak książki, nie wszystkie są doskonałe. Kluczem jest praca nad przykładami z życia wziętego. Po przeczytaniu wystarczającej liczby książek, naprawdę nic nie zyskasz, nie robiąc tego i nie eksperymentując z tym. – Joe

0

Dla systemu C++ w systemie Windows zdecydowanie warto uczyć się Microsoft Foundation Classes (MFC). Bez MFC, musisz implmenetować wszystkie rzeczy z Windows API samodzielnie, co jest bardziej C niż C++ i może być dość uciążliwe.

Możesz także chcieć zdobyć, nauczyć się i korzystać z bibliotek C++ boost. Nie są specyficzne dla systemu Windows, ale są świetnym źródłem informacji dla każdego.

+10

MFC jest martwą technologią. Jeśli chcesz pisać Windows GUI, użyj Qt lub zrezygnuj z C++ i użyj C#. –

+0

Należy zauważyć (wiem, że to wiesz, Neil), że znajomość Qt pozwala ci tworzyć aplikacje między różnymi platformami z tym, co, jak sądzę, można opisać jako minimalny wysiłek możliwy (zakładając, że rozmawiamy tylko tutaj o C++). – shylent

+0

@Neil: Bardziej bezpośrednim zamiennikiem jest WTL (ostatnio wybrany przez Chrome) i wyobrażam sobie, że kilka dziwnych/interesujących funkcji obsługiwanych przez Windows byłoby trudniejsze w użyciu z powodu niedopasowania interfejsu. Oczywiście, rzucam własną, więc co ja wiem. :) –

1
  • Dobra (i) cienka książka, aby zacząć w C++ to Accelerated C++ autorstwa Koeniga i Moo.
  • Zajmuję się głównie programowaniem pod Linuksem, ale słyszę wiele złych rzeczy o MFC, więc spróbuję znaleźć inną bibliotekę GUI.
  • Gdy już zaczniesz działać z bardziej skomplikowanymi częściami składni C++, zajrzyj do bibliotek Boost.Spirit do generowania parsera. Różne biblioteki Boost dostarczają bardzo użytecznych rozszerzeń do Biblioteki Standardowej.
1

Szczerze mówiąc, ucząc się języka C++ nigdy nie wziąłem książki (nie płonę proszę). Najlepszą radą, jaką mogę dać, jest przejście na this page i przejście przez samouczek. Obejmuje on większość języka C++ (czytaj: najczęściej używane funkcje) i sprawia, że ​​jest to tak proste, jak to tylko możliwe. Jeśli chodzi o API, które są ważne ... cóż, to kwestia preferencji. Żaden pakiet narzędzi/api naprawdę nie "wygrał", ale Qt, GTK - (gtkmm) i wxWidgets są dużymi graczami. Poza GUI, prawdopodobnie będziesz chciał nauczyć się zarówno surowych interfejsów winsock2 i wątków API, jak i wątków biblioteki boost oraz interfejsów sieciowych.Zgadzam się, że MFC umiera, a dla samego Windowsa C# odgrywa coraz większą rolę (nawet na linuksie/mono C# zaczyna powoli łapać ...).

Najlepszym sposobem nauki języka jest również kodowanie. Więc nie czytaj całej sprawy - bez praktycznego doświadczenia nigdy nie nauczysz się tego języka. Zadawaj pytania, odpowiadaj na te, które możesz, i pisz samouczki - dla siebie, jeśli nikt inny. Zapisywanie tego, czego się nauczyłeś, jest świetnym odniesieniem, a proces wyprostowania wszystkiego w twojej głowie, aby zapisać go w taki sposób, że inna osoba może go zrozumieć sam jest świetnym sposobem na wzmocnienie koncepcji. W dziwny, ale pozornie odwrotny sposób znalazłem najlepszy sposób, w jaki uczę się programowania, pomagając innym ludziom w ich pytaniach.

@ Neil - nie zgadzam się z tym, że samouczki online są "nie na miejscu". Jeśli już, to styl, którego uczą, może być nastawiony na czytelność, a nie na optymalizację - co w mojej-nie-tak-skromnej opinii jest zaletą. Z mojego ograniczonego doświadczenia znalazłem cplusplus.com jako odnośnik do prawie wszystkiego.

W szczególności, aby odpowiedzieć na pytania: 1. Nie wymaga grubej książki. Słyszałem, że te cieńsze mogą być przydatne jako szybkie odniesienie.

  1. To całkowicie subiektywne i zależy od celu. Sieć Boost i wielowątkowość bibliotek to prawdopodobnie dobry początek.

  2. między std :: string, std :: stringstream i getline (std :: istream &, std :: string &) powinieneś być całkiem niezły. C++ ma całą masę wbudowanej funkcjonalności, ale nie jest zbyt rozbudowany/ogromny/niemożliwy do nauczenia. Skorzystaj z tego. Całe przetwarzanie jest już wbudowane.

2

Ucz się z książkami. C++ jest językiem złożonym. Moja sugestia dotyczy najpierw szybkiego wprowadzenia i ogólnego przeglądu głównych paradygmatów programowania obsługiwanych przez C++: OOP i ogólne programowanie: Przyspieszone C++.

Po skończeniu tej książki można przejść do dwóch tomów Bruce Eckela: Thinking in C++, które są bardzo szczegółowe.

Do programowania interfejsu użytkownika najlepszy zestaw narzędzi C++ to Qt i gotowy do wielu formatów. Możesz przeczytać "C++ GUI Programming With Qt4" (pierwsza edycja jest do ściągnięcia za darmo, wystarczy google). Jeśli chcesz trzymać się C++/Windows API, poznaj bibliotekę szablonów systemu Windows, choć może to być trochę trudne ze względu na brak oficjalnej dokumentacji (mimo, że istnieją dobre tutoriale w sieci). WTL jest sposobem na tworzenie bardzo małych, lekkich aplikacji (biblioteki DLL Qt po drugiej stronie, potrzebują po kilka MB).

0

Bardzo polecam Stroustrup's Intro C++ book. Obejmuje ona C++ i STL w bardzo przystępny sposób.

Po tym można rozważyć zaglądanie do książek na temat Qt, wieloplatformowego zestawu narzędzi GUI lub WTL lub MFC dla Windows. Możesz zrobić .NET + C++, ale to byłoby dużo do nauczenia się. Z mojego doświadczenia z Qt i MFC, książki nie pomogły wiele. Manipulowanie przykładowymi aplikacjami, budowanie małych aplikacji po to, by przetestować jeden rodzaj funkcji i przeglądanie dokumentów było jedynym sposobem, w jaki mogłem sobie poradzić z jakąkolwiek biblioteką. Książki, które miałem po prostu zbytnio połyskiwały - nie były warte tych pieniędzy.

1

Proszę, na miłość Pete'a, nie używaj bezpośrednio funkcji Win32 API. Będziesz malował się w kąciku Microsoftu.Istnieje wiele bibliotek cross-platformowych tam można użyć zamiast:

  • Standardowa biblioteka C++: smyczki, plik I/O, kontenery, algorytmy
  • Boost do codziennego rzeczy wyjechali z biblioteki standardowej : parsowanie, tworzenie sieci, wątkowanie, inteligentne wskaźniki, pule pamięci, data/czas, macierze itp. ... Biblioteki doładowania są recenzowane przed zaakceptowaniem i są wysokiej jakości. Boost jest pożywką dla bibliotek, które ostatecznie stają się częścią następnego standardu C++.
  • Zestaw narzędzi GUI: Qt i wxWidgets są bardzo dojrzałe i szeroko stosowane. Jest o wiele więcej.