Problem, który mam, polega na tym, że większość książek w C ++, które czytam, wydaje prawie zawsze na składnię i podstawy języka, np. for
Pętle while
, tablice, listy, wskaźniki itp.
Ale nigdy nie wydają się budować niczego, co byłoby wystarczająco proste do nauki, a jednocześnie wystarczająco praktyczne, abyś zrozumiał filozofię i moc języka.
Potem natknąłem się na QT, która jest niesamowitą biblioteką!
Ale pracując nad demami, które mają, wydaje się, że jestem teraz w odwrotnym dylemacie. Czuję się jak syn bogatego człowieka jeżdżący samochodem sportowym subsydiowanym przez ojca. Jakbym mógł zbudować fantastyczne oprogramowanie, ale nie mam pojęcia, co się dzieje pod maską.
Jako przykład mojego dylematu postaw sobie zadanie zbudowania prostej przeglądarki internetowej. W czystym C ++ nie wiedziałbym nawet, od czego zacząć, ale z biblioteką Qt można to zrobić w ciągu kilku wierszy kodu.
Nie narzekam na to. Zastanawiam się tylko, jak wypełnić lukę w wiedzy między podstawową strukturą języka a interfejsem wysokiego poziomu, który zapewnia struktura Qt?
źródło
Odpowiedzi:
Czy chcesz wiedzieć, jak naciśnięcie pedału przyspieszenia przyspiesza bolid, czy zależy Ci tylko na tym, że naciśnięcie pedału przyspiesza bolid?
Widzisz zalety programowania czarnej skrzynki, która jest świetnym sposobem na zaprojektowanie systemu, gdy wszystkie skrzynki działają. Ktoś musi zrobić czarne skrzynki, a jeśli chcesz być tym facetem / dziewczyną, musisz wiedzieć więcej o języku niż facet korzystający z pudełka.
Są prace, które są dobre w każdym stylu, więc to od Ciebie zależy, co chcesz zaprogramować. IMO zrobiłbyś sobie krzywdę, gdybyś jednak nie podjął wysiłku, aby oderwać trochę abstrakcji, którą QT w końcu ci daje.
źródło
Największą szkodę, jaką sobie wyrządzisz, jeśli chcesz to tak ująć, jest to, że nie nauczysz się korzystać ze standardowych struktur danych, iteratorów, algorytmów i ciągów C ++. Qt ma własne biblioteki do wszystkich tych celów i wszyscy jesteście zmuszeni do korzystania z nich zamiast standardowych encji C ++, ponieważ API Qt akceptują tylko własne struktury danych.
Można argumentować, że nauka korzystania z jednej biblioteki algorytmów po opanowaniu drugiej jest trywialnym zadaniem. Przed pójściem na rozmowę kwalifikacyjną, w której ankieterzy oczekują opanowania C ++, upewnij się, że wcześniej poradziłeś sobie z tą banalnością.
źródło
Biorąc pod uwagę, że Qt ma swój własny meta-kompilator, z którym musisz przetwarzać pliki źródłowe, trudno uznać kod Qt za „po prostu C ++”.
Ale co ważniejsze, styl C ++, którego używa i zachęca Qt, jest czymś, co dla reszty z nas było ostatnio widoczne około 1995 roku.
Naprawdę jest to próba uczynienia C ++ jak najbardziej podobnym do Java. Pomija lub zniechęca do wszystkich niesamowitych rzeczy, które sprawiają, że C ++ jest dziś warte użycia . Zamiast tego jesteś zamknięty w podzbiorze, który przede wszystkim wydaje się gorszej Java.
Więc jeśli celem jest nauka języka C ++, powiedziałbym, że nie, trzymaj się z dala od Qt. Być może rzuć okiem na Boost, jeśli chcesz użyć ustalonej biblioteki jako punktu wyjścia. Wzmocnienie ucieleśnia praktyki uważane dziś za dobre .
Ale szczerze mówiąc, jeśli chcesz nauczyć się języka C ++ , wybierz dobry podręcznik i skoncentruj się na języku .
Pisanie przeglądarki internetowej, bez względu na to, jak to zrobisz, w najlepszym przypadku nauczy Cię o przeglądarkach internetowych. Nie nauczy Cię wiele o używanym języku.
C ++ jako język nie ma wbudowanej klasy WebBrowser. Jeśli czytasz standard C ++, nic nie mówi o przeglądarkach. Nie wspomina nawet o aplikacjach GUI.
Dzieje się tak, ponieważ te rzeczy są zbudowane na wierzchu, dostarczane przez biblioteki takie jak Qt. C ++, jak każdy język programowania, dotyczy logiki i sposobu jej wyrażania. I tak, to oznacza pracę z tablicami, wskaźnikami, pętlami i wszystkimi innymi rzeczami.
Czy byłbyś w stanie napisać przeglądarkę internetową przy użyciu tych wbudowanych narzędzi, mając wystarczająco dużo czasu ? Czy wiesz, jak wyrazić logikę programu? Jeśli nie, musisz poświęcić więcej czasu na pętle i wskaźniki, a mniej na dzwonienie
new QWebKit()
i po prostu kupowanie gotowych bibliotek.„Filozofia i potęga języka” dotyczy tablic, list i pętli, a nie przeglądarek internetowych.
źródło
Może.
Musiałbym zobaczyć kod, który umieszczasz w modułach obsługi zdarzeń.
Naprawdę jednak, nie miej obsesji na punkcie tego, jak wiele „wiesz”. Wszyscy używamy struktur okienkowych i wciąż się uczymy. Po prostu koduj / czytaj nowe rzeczy, a będziesz kontynuować naukę C ++. Uczenie się nowego frameworka okien to świetny dodatek do twoich umiejętności, nawet jeśli nie oznacza to, że możesz zaimplementować sieć neuronową lub Quicksort w C ++.
źródło
Nie martw się; na początku większość twojego kodu będzie po prostu używać frameworka, ale po pewnym czasie będziesz musiał go rozszerzyć , nawet jeśli tylko trochę. Następnie będziesz musiał używać coraz więcej C ++.
Pamiętaj również, że masz dostępne całe źródło Qt, IDE z przyjemnością przeniesie Cię do definicji dowolnej funkcji / metody / klasy, którą chcesz. Im głębiej idziesz, tym więcej C ++ zobaczysz.
Inni wspominali o różnicy między Qt C ++ a standardowym C ++. Te należą do dwóch obozów:
inna biblioteka: Qt obejmuje wszystkie zwykłe kontenery: tablice, listy, zestawy, mapy skrótów itp. Pasują do siebie bardzo dobrze i są dobrymi implementacjami, ale nie są odmianą STD. Mimo to, w ostatnich wersjach (4.1 i późniejszych, myślę) mają one API podobne do STD oprócz starej odmiany (i API podobne do Java). Ostatecznie wybory projektowe (kiedy użyć tablicy, kiedy użyć mapy skrótów) są takie same, więc przejście na STD dla projektów nie będących Qt nie jest takie trudne.
moc
dodatki do składni: głównie do obsługi sygnałów, ale także kilka ładniejszych konstrukcji pętli. Wiele osób uważa, że to narzędzie oznacza, że nie jest to już C ++; ale IMHO czują się jak nieco mądrzejsze makra. Dobra obsługa luźno sprzężonych sygnałów jest ogromną zaletą dobrego frameworka i jest to niezwykle trudne w statycznym języku. We współczesnym C ++ jest to wykonalne przy dużej dawce szablonów; ale to było dalekie od standardu, kiedy Qt pierwszy raz dostałmoc
. Na koniec, jeśli później chcesz wykonywać projekty inne niż Qt, najpierw sprawdź, czy będziesz używać dowolnego frameworka i czy ma on sygnały. Jeśli tak, to zastosowanie będzie miała większość tego, co zwykłeś robić z Qt, więc nie zaszkodzi w nauce Qt w pierwszej kolejności.źródło
moc
?foreach
to tylko makro .... (właściwie „alias” doQ_FOREACH
zdefiniowania w<Qt/qglobal.h>
). Nie sądzę, żemoc
to przetwarza. A C ++ 11 mafor (auto it : container)
konstrukcję!Qt jest szeroko stosowany w świecie komercyjnym, ponieważ zapewnia pełny zestaw narzędzi i środowisko programistyczne, w tym dobrą bibliotekę GUI.
W pełni obsługuje również internacjonalizację, w tym doskonałe narzędzie „Lingwista”.
Jeśli planujesz karierę akademicką, nie zawracałbym sobie głowy Qt. Jeśli natomiast lubisz C ++ i chcesz nauczyć się umiejętności rynkowej, warto nauczyć się Qt.
I tak, Qt to C ++, i możesz dodawać biblioteki standardowe i zwiększać zawartość bibliotek do swoich serc, jeśli dzięki temu poczujesz się lepiej.
źródło
Nauka C ++ poprzez Qt to zły pomysł. Najpierw musisz nauczyć się pojęć językowych niezależnych od jakiegokolwiek frameworku i tego właśnie nauczą Cię książki w C ++ i mają rację. Zasadniczo „for i pętle, tablice, listy, wskaźniki” to języki programowania. Dodatkowe funkcjonalności zapewniają frameworki. Gdy nauczysz się języka programowania, możesz nauczyć się dowolnego frameworku, takiego jak Qt lub MFC, który jest zbudowany przy użyciu tego języka, dzięki czemu aplikacje można szybko opracowywać. Jeśli chodzi o Qt, po opanowaniu języka c ++ jest to doskonała platforma, dzięki której jesteś tak produktywny, jak każdy programista Java lub .Net. Wkrótce będziesz mógł tworzyć aplikacje na iOS i Androida przy użyciu Qt.
źródło
Cóż, myślę, że najlepszym sposobem na naukę C ++ jest TYLKO użycie własnej składni (Standard C ++), więc będziesz mógł korzystać z JĘZYKA, a NIE z Qt (lub jakichkolwiek innych frameworków, bibliotek ... itd.).
Czemu? ponieważ jako początkujący, kiedy spojrzysz na dowolny kod C ++ zmieszany z innym kodem innym niż C ++ (w tym przypadku Qt), nie będziesz w stanie zobaczyć, co jest C ++, a co nie, raczej będzie to bardziej złożony proces.
źródło