Das Problem, das ich habe, ist, dass die meisten C ++ Bücher, die ich lese, fast immer für die Syntax und die Grundlagen der Sprache ausgegeben werden, z. B. für for
Schleifen while
, Arrays, Listen, Zeiger usw.
Aber sie scheinen nie etwas zu bauen, das einfach genug ist, um es zu lernen, und dennoch praktisch genug, um Sie dazu zu bringen, die Philosophie und die Kraft der Sprache zu verstehen.
Dann stieß ich auf QT , die eine erstaunliche Bibliothek ist!
Aber die Demos, die sie haben, scheinen sich in einem umgekehrten Dilemma zu befinden. Ich fühle mich wie der Sohn des reichen Mannes, der in einem vom Vater subventionierten Sportwagen herumfährt. Als ob ich fantastische Software bauen könnte, aber keine Ahnung habe, was unter der Haube vor sich geht.
Nehmen Sie als Beispiel für mein Dilemma die Aufgabe, einen einfachen Webbrowser zu erstellen. In reinem C ++ würde ich nicht einmal wissen, wo ich anfangen soll, aber mit der Qt-Bibliothek kann dies innerhalb weniger Codezeilen erfolgen.
Ich beschwere mich nicht darüber. Ich frage mich nur, wie ich die Wissenslücke zwischen der Grundstruktur der Sprache und der High-Level-Oberfläche füllen kann, die das Qt-Framework bietet.
quelle
Antworten:
Möchten Sie wissen, wie das Gaspedal schneller fährt, oder interessiert es Sie nur, dass das Gaspedal schneller fährt?
Sie sehen den Vorteil der Black-Box-Programmierung, die eine großartige Möglichkeit ist, ein System zu entwerfen, wenn alle Boxen funktionieren. Jemand muss die Black Box machen und wenn du der Typ / das Mädchen sein willst, musst du mehr über die Sprache wissen als der Typ, der die Box benutzt.
Es gibt Jobs, die in jedem Stil gute Jobs sind. Es liegt also an Ihnen, was Sie programmieren möchten. IMO würden Sie sich selbst einen schlechten Dienst erweisen, wenn Sie sich nicht die Mühe machen würden, einen Teil der Abstraktion, die QT Ihnen letztendlich gibt, zurückzuziehen.
quelle
Der größte Schaden, den Sie sich selbst antun werden, besteht darin, dass Sie nicht lernen, die Standard-C ++ - Datenstrukturen, -Iteratoren, -Algorithmen und -Strings überhaupt zu verwenden. Qt verfügt für all diese Zwecke über eigene Bibliotheken, und Sie müssen sie fast immer anstelle von Standard-C ++ - Entitäten verwenden, da Qt-APIs nur eigene Datenstrukturen akzeptieren.
Man könnte argumentieren, dass das Erlernen der Verwendung einer Algorithmusbibliothek nach dem Beherrschen einer anderen eine triviale Aufgabe ist. Bevor Sie zu einem Interview gehen, von dem die Interviewer erwarten, dass Sie C ++ beherrschen, sollten Sie sich zuvor mit dieser Trivialität befassen.
quelle
Angesichts der Tatsache, dass Qt einen eigenen Meta-Compiler hat, mit dem Sie Ihre Quelldateien verarbeiten müssen, ist es schwierig, Qt-Code als "nur C ++" zu betrachten.
Noch wichtiger ist jedoch, dass der Stil von C ++, den Qt verwendet und fördert, für den Rest von uns zuletzt um 1995 gesehen wurde.
Wirklich, es ist ein Versuch, C ++ so Java-ähnlich wie möglich zu machen. Es verpasst oder entmutigt all die erstaunlichen Dinge, die C ++ heutzutage wirklich wertvoll machen . Stattdessen sind Sie an eine Teilmenge gebunden, die sich vor allem wie ein minderwertiges Java anfühlt.
Wenn das Ziel darin besteht, C ++ zu lernen, würde ich nein sagen, meiden Sie Qt. Werfen Sie stattdessen einen Blick auf Boost, wenn Sie eine etablierte Bibliothek als Ausgangspunkt verwenden möchten. Boost verkörpert die Praktiken , die als gut angesehen werden heute .
Aber ehrlich gesagt, wenn Sie die C ++ - Sprache lernen möchten , dann holen Sie sich ein gutes Lehrbuch und konzentrieren Sie sich auf die Sprache .
Wenn Sie einen Webbrowser schreiben, egal wie Sie es tun, lernen Sie bestenfalls etwas über Webbrowser. Es wird Ihnen nicht viel über die Sprache beibringen, die Sie verwenden.
In C ++ als Sprache ist keine WebBrowser-Klasse integriert. Wenn Sie den C ++ - Standard lesen, wird nichts über Browser ausgesagt. Es werden nicht einmal GUI-Anwendungen erwähnt.
Das liegt daran, dass diese Dinge von Bibliotheken wie Qt darauf aufbauen . Wie in jeder Programmiersprache geht es auch in C ++ um Logik und darum, wie man diese Logik ausdrückt. Und ja, das bedeutet, mit Arrays und Zeigern und Schleifen und all diesen Dingen zu arbeiten.
Würden Sie in der Lage sein, einen Webbrowser mit nur diesen integrierten Tools zu schreiben, wenn Sie genügend Zeit haben ? Würdest du wissen, wie man die betreffende Programmlogik ausdrückt? Wenn nicht, müssen Sie mehr Zeit für Schleifen und Zeiger aufwenden und weniger Anrufe
new QWebKit()
tätigen und einfach vorgefertigte Bibliotheken huckepack nehmen.Die "Philosophie und Kraft der Sprache" liegt in Arrays und Listen und Schleifen, nicht in Webbrowsern.
quelle
Vielleicht.
Ich müsste den Code sehen, den Sie in Ihre Event-Handler einfügen.
Aber sei nicht besessen davon, wie viel du "weißt". Wir alle verwenden Fenster-Frameworks und lernen noch. Schreiben Sie einfach weiter / lesen Sie neue Dinge und Sie werden weiterhin C ++ lernen. Das Erlernen eines neuen Fenster-Frameworks ist eine großartige Ergänzung Ihrer Fähigkeiten, auch wenn dies nicht bedeutet, dass Sie ein neuronales Netzwerk oder einen Quicksort in C ++ implementieren können.
quelle
Mach dir keine Sorgen; zunächst nur die meisten Ihrer Code verwenden , den Rahmen, aber nach einer Weile Sie müssen verlängern sie, wenn auch nur ein wenig. Dann müssen Sie immer mehr von C ++ verwenden.
Denken Sie auch daran, dass Ihnen die gesamte Qt-Quelle zur Verfügung steht. Die IDE führt Sie gerne zur Definition der gewünschten Funktion / Methode / Klasse. Je tiefer Sie gehen, desto mehr C ++ werden Sie sehen.
Andere haben den Unterschied zwischen Qt C ++ und Standard C ++ erwähnt. Diese fallen in zwei Lager:
andere Bibliothek: Qt enthält alle üblichen Container: Arrays, Listen, Mengen, Hashmaps usw. Sie passen sehr gut zusammen und sind gute Implementierungen, aber sie sind nicht die STD-Variante. In neueren Versionen (4.1 und höher, glaube ich) haben sie zusätzlich zur alten Variante (und einer Java-ähnlichen API) 'STD-ähnliche' APIs. Letztendlich sind die Entwurfsentscheidungen (wann ein Array verwendet werden soll, wann eine Hashmap verwendet werden soll) gleich, so dass der Wechsel zu STD für Nicht-Qt-Projekte nicht so schwierig ist.
moc
Syntax-Ergänzungen: hauptsächlich für die Signalverarbeitung, aber auch für ein paar schönere Loop-Konstruktionen. Viele Leute glauben, dass dieses Tool nicht mehr C ++ ist. Aber meiner Meinung nach fühlen sie sich wie etwas schlauere Makros an. Eine gute, lose gekoppelte Signalverarbeitung ist ein großer Vorteil eines guten Frameworks, und es ist bekanntermaßen schwierig, eine statisch typisierte Sprache zu verwenden. In modernem C ++ ist dies mit einer großen Menge an Vorlagen möglich. Aber das war alles andere als Standard, als Qt zum ersten Mal kammoc
. Wenn Sie später Nicht-Qt-Projekte durchführen möchten, überprüfen Sie am Ende zunächst, ob Sie ein Framework verwenden und ob es Signale enthält. Wenn ja, dann trifft das meiste, was Sie mit Qt gewohnt sind, zu. Es kann also nicht schaden, zuerst Qt zu lernen.quelle
moc
?foreach
ist nur ein Makro .... (eigentlich ein "Alias" inQ_FOREACH
definiert<Qt/qglobal.h>
). Ich glaube nicht, dassmoc
das verarbeitet wird. Und C ++ 11 hat dasfor (auto it : container)
Konstrukt!Qt ist in der Geschäftswelt weit verbreitet, da es ein vollständiges plattformübergreifendes Toolset und eine Entwicklungsumgebung bietet, einschließlich einer guten GUI-Bibliothek.
Es unterstützt auch die Internationalisierung in vollem Umfang, einschließlich des hervorragenden Tools "Linguist".
Wenn Sie eine akademische Karriere planen, würde ich mich nicht um Qt kümmern. Wenn Sie andererseits C ++ mögen und eine marktfähige Fertigkeit erlernen möchten, dann ist Qt das Erlernen wert.
Und ja, Qt ist C ++, und Sie können die Standard- und Boost-Bibliotheken nach Herzenslust mischen, wenn Sie sich dadurch besser fühlen.
quelle
Es ist eine schlechte Idee, C ++ durch Qt zu lernen. Zuerst müssen Sie die Sprachkonzepte unabhängig von einem Framework lernen, und genau das werden Sie in c ++ - Büchern lernen, und sie sind richtig. Grundsätzlich sind 'for und loops while, Arrays, Listen, Zeiger' das, worum es in Programmiersprachen geht. Zusätzliche Funktionen werden durch Frameworks bereitgestellt. Sobald Sie eine Programmiersprache gelernt haben, können Sie jedes Framework wie Qt oder MFC erlernen, das mit dieser Sprache erstellt wurde, sodass Anwendungen schnell entwickelt werden können. In Bezug auf Qt ist c ++ nach dem Erlernen ein hervorragendes Framework, das Sie so produktiv macht wie alle Java- oder .NET-Entwickler. In Kürze können Sie mit Qt iOS- und Android-Apps entwickeln.
quelle
Nun, ich denke, der beste Weg, um C ++ zu lernen, ist, NUR seine eigene Syntax zu verwenden (Standard C ++), so dass Sie in der Lage sein werden, das LANGUAGE-Zeug und NICHT das Qt (oder andere Frameworks, Bibliotheken usw.) zu verwenden.
Warum? Denn wenn Sie sich als Anfänger einen C ++ - Code ansehen, der mit einem anderen Nicht-C ++ - Code (in diesem Fall Qt) gemischt ist, können Sie nicht erkennen, was C ++ ist und was nicht, sondern es ist ein komplexerer Prozess.
quelle