Jestem studentem informatyki, w wyniku czego nauczyłem się C ++ jako lepszej wersji języka C z klasami. W końcu próbuję wynaleźć koło, gdy potrzebne jest rozwiązanie złożonego problemu, ale po pewnym czasie mogę znaleźć jakąś funkcję języka lub standardową bibliotekę.
Czuję się dobrze z moimi char*
i *(int*)(someVoidPointer)
idiomami, ale ostatnio, po (niewielkim) udziale w projekcie open source, czuję, że nie tak powinno się myśleć, pisząc kod C ++. Jest znacznie inny niż C.
Biorąc pod uwagę, że znam programowanie zorientowane obiektowo dość dobrze i nie przeszkadza mi stroma krzywa uczenia się, co sugerowałbyś, abym zajął się ścieżką C ++, gdy koduję C ++?
Odpowiedzi:
Na podstawie twoich komentarzy znasz składnię C ++.
Nie piszesz w C ++, ale to, co często określa się jako C w klasach.
Znacznik C ++ na stackoverflow jest dobrym miejscem do rozpoczęcia, zawiera listę czytelniczą i FAQ .
Jedynym prawdziwym sposobem nauki jest pisanie kodu i zachęcanie doświadczonego użytkownika do komentowania. Tutaj możesz umieścić swój kod do sprawdzenia. Dobry przykład
Przestań ich używać, przejdź na std :: string.
Przestań ich używać (oprócz interfejsu z kodem C). Korzystanie z koncepcji funktora zapewnia szereg korzyści (w tym pojęcie stanu kapsułkowania).
Tak. C i C ++ rozeszły się jako języki. Chociaż można użyć praktycznie tej samej składni, co uważa się za dobry kod C, zwykle nie jest uważany za dobry kod C ++ (lub odwrotnie).
Masz podstawowe podstawy.
Dużo pracy :-)
źródło
Książka Effective C ++ uczy wielu interesujących rzeczy i pozwoli Ci docenić funkcje C ++. Istnieje również Efektywna STL - nie przeczytałem jej, ale jestem pewien, że byłaby to świetna lektura, jeśli nie znasz STD.
Ważną rzeczą jest, aby dowiedzieć się, że należy skorzystać z językiem i nie wyważać otwartych drzwi stale . Nauczyłeś się już, jak je tworzyć, więc ułatw sobie (i innym!) I używaj narzędzi, które wykorzystują cały swój potencjał.
Na marginesie, spotkasz wielu ludzi, którzy domagają się użycia STD. Jest to tak samo złe nastawienie jak samo używanie
char*
- czasami nie jest to właściwe narzędzie i jest wiele innych. W tym samym sensie nie zniechęcaj się do tworzenia własnych klas kontenerów - jeśli zamierzasz używaćchar*
najlepszego miejsca do tego celu, jest bezpiecznie zapakowane wewnątrz klasy.źródło
Mogę polecić ostatnie ujęcie BUILD podane przez Herb Suttera. Ten zatytułowany „ Pisanie nowoczesnego kodu C ++: ewolucja C ++ na przestrzeni lat ”:
Nie jest to zła prezentacja, niezbyt długa, ma kilka miłych wskazówek na temat nowych funkcji w najnowszym standardzie, które dałyby kilka wskazówek, jak zaktualizować stary styl C / C ++.
Poza tym musisz nauczyć się STL - nie jest to skomplikowane i jest mnóstwo książek, np. Efektywny STL, lub po prostu samouczki dla STL, aby zacząć.
źródło
Przeczytałem Accelerated C ++ autorstwa Andrew Koeniga i Barbary Moo, aby pomóc mi w nauczaniu C ++ po prawie dziesięciu latach pracy z C ++. (W tym czasie zacząłem majstrować przy metaprogramowaniu szablonów). Nadal uważałem to za objawienie, chociaż nie sądzę, że nauczyło mnie to nowych faktów na temat języka. 1
Nauczyłem się jednak patrzeć na C ++ i używać go jako języka wysokiego poziomu. Nie majstrować przy surowych wskaźnikach i
delete
używać standardowej biblioteki tam, gdzie to możliwe.Mam wrażenie, że właśnie tego szukasz.
1 Nie znaczy to, że nie było już nic, czego mógłbym się nauczyć (nawet teraz jest ich mnóstwo, dekadę później), ale jest tylko tyle wiedzy, którą można wcisnąć w 250-stronicową książkę wprowadzającą.
źródło
Przed odpowiedzią - uwaga: Idiomatic C ++ jest ruchomym celem. Wraz ze zmianą języka zmieniają się również jego idiomy. W rzeczywistości, niektóre funkcje językowe są przeznaczone do pozwala nam pozbyć się kodu idiomatyczne, które mogłyby zostać uproszczone lub ulepszone z pewnym wsparciu samego języka, albo przynajmniej biblioteki standardowej. Pamiętaj więc, że każde źródło może Cię poinformować tylko o tym, co było idiomatyczne w momencie pisania .
Powiedziawszy to, dobrze byłoby sprawdzić:
Witryna codereview.SX
Sieć StackExchange ma witrynę o nazwie codereview.stackexchange.com . Jeśli napisałeś fragment kodu C ++ - klasę, część biblioteki, coś niezbyt dużego - możesz go tam opublikować i poprosić społeczność o sprawdzenie. Pamiętaj, że kod musi się kompilować i być w zasadzie funkcjonalny - ta strona nie jest przeznaczona do debugowania.
Możesz także wyszukać tam kod C ++ związany z tym, nad czym pracujesz, i zobaczyć, co podkreślają recenzenci. Możesz nawet spróbować samodzielnie przeczytać opublikowany kod, nie zamieszczając odpowiedzi, a następnie przeczytać, co inni o nim myślą.
Prezentacje wideo z konferencji C ++
Każdego roku odbywa się kilka konferencji programistów poświęconych C ++:
i to nie są jedyne ... w każdym razie, każdy z tych postów wideo wielu / wszystkich prezentacji. Nauczą cię bardzo dużo , w tym kodowania idiomatycznego i zasady, według których możesz zdecydować, co powinno być idiomatyczne, a czego nie.
Czasami można nawet uzyskać przesuwane talie głośników.
źródło
Cóż, projekty open source to bardzo dobry początek. Nie oczekuj, że zostaniesz profesjonalnym programistą opartym na twoich zajęciach uniwersyteckich, nie są do tego przeznaczone (jak napisałem w mojej odpowiedzi tutaj ).
Wygląda na to, że znasz składnię, to dobrze. Teraz idź i przeczytaj kod innych osób i dodaj swój własny do recenzji. Wiele się nauczysz czytając kod i próbując go zrozumieć, debugując go i naprawiając, i oczywiście - dodając do niego przestrzegając już istniejących konwencji kodowania.
Jak już wspomniano, profesjonalne książki są również bardzo dobrym pomysłem, a przeglądanie pytań i odpowiedzi na StackOverflow nauczy Cię bardzo dużo (na pewno dużo mnie uczy i uważam się za profesjonalistę w C ++).
źródło
Czytanie dużo dobrego kodu C ++ prawdopodobnie pomoże. Musisz zobaczyć kod, żeby go poczuć. Z drugiej strony większość kodu C ++ jest niepoprawna.
źródło