Le problème que j'ai, c'est que la plupart des livres C ++ que je lis passent presque toujours sur la syntaxe et les bases du langage, par exemple les for
boucles while
, les tableaux, les listes, les pointeurs, etc.
Mais ils ne semblent jamais construire quelque chose d'assez simple à utiliser pour l'apprentissage, mais suffisamment pratique pour vous faire comprendre la philosophie et le pouvoir de la langue.
Puis je suis tombé sur QT qui est une bibliothèque incroyable!
Mais en travaillant sur les démos qu'ils ont, il me semble que je suis maintenant dans le dilemme inverse. Je me sens comme le fils du riche qui roule dans une voiture de sport subventionnée par le père. Comme si je pouvais créer un logiciel fantastique, mais je n'ai aucune idée de ce qui se passe sous le capot.
Comme exemple de mon dilemme, prenez la tâche de construire un simple navigateur Web. En C ++ pur, je ne saurais même pas par où commencer, mais avec la bibliothèque Qt, cela peut être fait en quelques lignes sur le code.
Je ne m'en plains pas. Je me demande juste comment combler le vide de connaissances entre la structure de base du langage et l'interface de haut niveau que fournit le framework Qt?
la source
Réponses:
Voulez-vous savoir comment marcher sur l'accélérateur accélère la voiture, ou vous souciez-vous seulement que marcher sur l'accélérateur accélère la voiture?
Vous voyez l'avantage de la programmation de la boîte noire, qui est un excellent moyen de concevoir un système lorsque toutes les boîtes fonctionnent. Quelqu'un doit faire les boîtes noires et si vous voulez être ce gars / fille, vous devez en savoir plus sur la langue que le gars qui utilise la boîte.
Il y a des emplois qui sont de bons emplois dans chaque style, donc c'est à vous de décider ce que vous voulez programmer. OMI, vous ne vous rendriez pas service si vous ne déployiez pas l'effort de retirer une partie de l'abstraction que QT vous donne finalement.
la source
Le plus de dégâts que vous vous ferez, si vous voulez le dire ainsi, est que vous n'apprendrez pas du tout à utiliser les structures de données, les itérateurs, les algorithmes et les chaînes C ++ standard. Qt possède ses propres bibliothèques à toutes ces fins, et vous êtes presque obligé de les utiliser à la place des entités C ++ standard car les API Qt n'acceptent que les structures de données qui leur sont propres.
On pourrait affirmer qu'apprendre à utiliser une bibliothèque d'algorithmes après avoir maîtrisé l'autre est une tâche triviale. Avant de passer à un entretien où les enquêteurs s'attendent à ce que vous maîtrisiez le C ++, assurez-vous de gérer cette trivialité au préalable.
la source
Étant donné que Qt a son propre méta-compilateur avec lequel vous devez traiter vos fichiers source, il est difficile de considérer le code Qt comme étant "juste C ++".
Mais plus important encore, le style de C ++ que Qt utilise et encourage est quelque chose qui, pour le reste d'entre nous, a été vu pour la dernière fois vers 1995.
Vraiment, c'est une tentative de rendre C ++ aussi semblable à Java que possible. Il passe à côté ou décourage toutes les choses incroyables qui valent vraiment la peine d'utiliser le C ++ aujourd'hui . Au lieu de cela, vous êtes enfermé dans un sous-ensemble qui ressemble le plus souvent à un Java inférieur.
Donc, si l'objectif est d'apprendre le C ++, je dirais non, restez à l'écart de Qt. Jetez peut-être un œil à Boost à la place, si vous souhaitez utiliser une bibliothèque établie comme point de départ. Boost incarne les pratiques considérées comme bonnes aujourd'hui .
Mais honnêtement, si vous voulez apprendre le langage C ++ , choisissez un bon manuel et concentrez-vous sur le langage .
Écrire un navigateur Web, peu importe comment vous le faites, vous apprendra au mieux sur les navigateurs Web. Cela ne vous apprendra pas grand-chose sur la langue que vous utilisez.
C ++ en tant que langage n'a pas de classe WebBrowser intégrée. Si vous lisez la norme C ++, elle ne dit rien sur les navigateurs. Il ne mentionne même pas les applications GUI.
C'est parce que ces choses sont construites sur le dessus, fournies par des bibliothèques telles que Qt. Le C ++, comme tout langage de programmation, concerne la logique, la façon d'exprimer cette logique. Et oui, cela signifie travailler avec des tableaux et des pointeurs et des boucles et toutes ces choses.
Seriez-vous en mesure d'écrire un navigateur Web en utilisant uniquement ces outils intégrés, avec suffisamment de temps ? Savez-vous comment exprimer la logique du programme impliqué? Sinon, vous devez passer plus de temps sur les boucles et les pointeurs, et moins appeler
new QWebKit()
et simplement superposer des bibliothèques prêtes à l'emploi.La «philosophie et la puissance du langage» se trouvent dans les tableaux et les listes et boucles, pas dans les navigateurs Web.
la source
Peut être.
Je devrais voir le code que vous mettez dans vos gestionnaires d'événements.
Vraiment cependant, ne soyez pas obsédé par ce que vous "savez". Nous utilisons tous des cadres de fenêtrage et nous apprenons tous toujours. Continuez simplement à coder / lire de nouvelles choses et vous continuerez à apprendre le C ++. L'apprentissage d'un nouveau cadre de fenêtrage est un excellent ajout à vos compétences même si cela ne signifie pas que vous pouvez implémenter un réseau de neurones ou un tri rapide en C ++.
la source
Ne t'inquiète pas tout d' abord la plupart de votre code sera tout simplement utiliser le cadre, mais après un certain temps , vous devrez étendre , même si un peu. Ensuite, vous devrez utiliser de plus en plus de C ++.
Rappelez-vous également que vous avez toute la source de Qt disponible, l'IDE vous amènera avec plaisir à la définition de la fonction / méthode / classe que vous souhaitez. Plus vous allez en profondeur, plus vous verrez de C ++.
D'autres ont mentionné la différence entre Qt C ++ et C ++ standard. Ceux-ci se répartissent en deux camps:
bibliothèque différente: Qt inclut tous les conteneurs habituels: tableaux, listes, ensembles, hashmaps, etc. Ils s'emboîtent très bien et sont de bonnes implémentations, mais ils ne sont pas de la variété STD. Pourtant, dans les versions récentes (4.1 et ultérieures, je pense), ils ont des API de type STD en plus de l'ancienne variété (et une API de type Java). En fin de compte, les choix de conception (quand utiliser un tableau, quand utiliser une table de hachage) sont les mêmes, donc passer en STD pour les projets non-Qt n'est pas si difficile.
moc
ajouts de syntaxe: principalement pour la gestion du signal, mais aussi quelques constructions de boucles plus agréables. Beaucoup de gens pensent que cet outil signifie qu'il n'est plus en C ++; mais à mon humble avis, ils se sentent comme des macros légèrement plus intelligentes. Une bonne gestion du signal à couplage lâche est un énorme avantage d'un bon cadre, et c'est notoirement difficile à faire sur un langage typé statique. En C ++ moderne, c'est faisable avec une forte dose de modèles; mais c'était loin d'être standard lorsque Qt est arrivémoc
. En fin de compte, si vous souhaitez plus tard faire des projets non-Qt, vérifiez d'abord si vous utiliserez un framework et s'il a des signaux. Si oui, alors la plupart de ce que vous avez l'habitude de faire avec Qt s'appliquera, donc pas de «mal» à apprendre Qt en premier.la source
moc
?foreach
est juste une macro .... (en fait un "alias"Q_FOREACH
défini dans<Qt/qglobal.h>
). Je ne pense pas que cela lemoc
traite. Et C ++ 11 a lafor (auto it : container)
construction!Qt est largement utilisé dans le monde commercial car il fournit un ensemble d'outils et un environnement de développement multiplateforme complets, y compris une bonne bibliothèque GUI.
Il prend également pleinement en charge l'internationalisation, y compris l'excellent outil «Linguist».
Si vous prévoyez une carrière universitaire, je ne m'embêterais pas avec Qt. Si, en revanche, vous aimez le C ++ et que vous souhaitez apprendre une compétence commercialisable, Qt vaut la peine d'être appris.
Et oui, Qt est C ++, et vous pouvez mélanger les bibliothèques standard et augmenter le contenu de votre cœur si cela vous fait vous sentir mieux.
la source
C'est une mauvaise idée d'apprendre le C ++ via Qt. Vous devez d'abord apprendre les concepts du langage indépendamment de tout framework et c'est ce que les livres c ++ vous apprendront et ils ont raison. Fondamentalement, «pour et boucles tandis que, les tableaux, les listes, les pointeurs» sont ce que sont les langages de programmation. Des fonctionnalités supplémentaires sont fournies par les frameworks. Une fois que vous avez appris un langage de programmation, vous pouvez apprendre n'importe quel framework comme Qt ou MFC qui est construit en utilisant le langage, afin que les applications puissent être développées rapidement. En ce qui concerne Qt, une fois que vous apprenez le c ++, c'est un excellent framework qui vous rend aussi productif que n'importe quel développeur Java ou .Net. Vous pourrez bientôt développer des applications iOS et Android à l'aide de Qt.
la source
Eh bien, je pense que la meilleure façon d'apprendre le C ++ est d'utiliser UNIQUEMENT sa propre syntaxe (Standard C ++), donc vous pourrez utiliser le truc LANGUAGE, et PAS le Qt (ou tout autre framework, bibliothèque ... etc).
Pourquoi? car en tant que débutant, lorsque vous regardez un code C ++ mélangé à un autre code non-C ++ (Qt dans ce cas), vous ne pourrez pas voir ce qui est en C ++ et ce qui ne l'est pas, ce sera plutôt un processus plus complexe.
la source