Je connais assez bien C # (autodidacte, malheureusement) et j'ai besoin de faire de la programmation C++ pour une application Windows. J'ai pu trouver une tonne d'informations pour les développeurs C++ apprenant le C # mais je n'ai pas pu trouver grand-chose sur l'apprentissage du C++ alors que vous connaissez déjà le C #. Quelqu'un at-il rencontré un bon aperçu des bases?
MSDN a une comparaison mais ce n'est pas très détaillé.
Je peux rassembler plusieurs sources mais j'ai pensé qu'il y avait quelque chose - je ne le trouve pas. Merci de votre aide.
Ce fil sur C++ pour Java sont très similaires et devraient être utiles, en particulier le post de Mark Byer:
Lisez ces livres:
- C++ efficace
- Les livres de Sutter - style C++ exceptionnel par exemple
- Design C++ moderne
La chose la plus importante à garder à l'esprit est probablement de comprendre la différence dans les techniques de gestion de la mémoire entre C #/Java et C++ .
Un de mes profs venait d'un Java background et a enseigné un cours d'introduction C++ en pensant que ce serait du gâteau. Rien de ce qu'il a expliqué n'avait de sens pour personne. Il avait eu des fuites de mémoire partout. Son arithmétique de pointeur était terrible. Il n'est jamais arrivé à la partie OOP du programme (Dieu merci). Pratiquement rien de ce qu'il a démontré n'aurait compilé. Il ne comprenait pas que char[]
avait besoin d'une sentinelle \0
. Ne finissez pas comme lui.
Malheureusement, il n'y a pas grand-chose sur le C++ qui soit basique, donc je ne mettrais pas vos espoirs au clair. De plus, vous savez peu de choses sur C # qui est même transférable à distance en C++, donc je ne m'attendrais pas à ce qu'il existe un matériau spécifique couvrant cet angle. Vous devrez apprendre de zéro.
Il n'y a pas de solution facile pour cela, C++ n'est pas particulièrement difficile, mais ce n'est pas facile pour les débutants.
Je recommanderais de lire les bases de la programmation en C (pour obtenir une mise à la terre des choses de bas niveau que vous trouverez), puis d'apprendre la STL, suivi d'articles par des gens comme Scott Meyers. En voici un pour vous aider à démarrer, car il montre comment vous devriez écrire du C++ moderne, par rapport au C-with-classes.
Je ne sais pas si vous cherchez toujours du matériel, j'ai trouvé cet article il y a quelques mois. Ce n'est pas un livre (seulement 53 pages). L'introduction dit tout:
This is a somewhat short guide to the important things to know if you are a C# programmer and find yourself needing or wanting to work in C++
http://geekswithblogs.net/mikebmcl/archive/2012/02/02/c-to-c-ndash-a-somewhat-short-guide.aspx
Et il y a aussi un article de mise à jour:
La page ci-dessus contient maintenant un lien mort vers une version pdf. Voici le pdf archivé .
Bon apprentissage :)
Je pense qu'il est bon que vous ne trouviez pas trop de tutoriels C # vers C++. Ils peuvent probablement embrouiller votre cerveau. C'est un peu comme essayer d'apprendre à conduire une moto d'abord, puis passer à un vélo (ce n'est pas une anologie tout à fait appropriée mais vous avez l'idée). Il vaut mieux pour vous prendre un nouveau livre sur C++. Étant donné que vous connaissez déjà les concepts OOP, vous pouvez ignorer les longues introductions aux concepts OOP (ils sont destinés aux personnes migrant de C vers C++). Ou allez directement pour un livre de référence destiné aux niveaux débutant à intermédiaire ou intermédiaire.
Il y a environ un an, j'étais dans le même bateau que vous: un c # dev autodidacte qui ressentait le besoin d'apprendre le C++. Certes, je me suis arrêté et j'ai commencé plusieurs fois. À ma troisième tentative, j'ai finalement réussi.
Ce qui est impératif à comprendre, c'est qu'en termes de méthodologies C++ et C #, vous passerez probablement beaucoup de temps à comprendre quelles méthodes de manipulation de données à travers des pointeurs et des références vraiment signifie, ainsi que quand et comment les utiliser compte tenu des circonstances.
La bonne chose à propos de C++ est que l'allocation de la pile d'objets est assez simple pour la plupart, et vous devez allouer les objets de cette façon si votre programme répond aux exigences spécifiées dans cette méthode. Sinon, vous comptez sur des pointeurs pour la vitesse, l'efficacité et le nettoyage rapide. Je recommande de lire ceci: http://www.parashift.com/c++-faq-lite/ car cela vous donnera beaucoup de connaissances techniques sur le fonctionnement de C++ sous le capot.
Laisse moi te donner un exemple:
En C++, il existe cette implémentation de constructeur connue sous le nom de "liste d'initialisation", qui diffère de l'initialisation des membres de classe dans le corps d'un constructeur. Pourquoi? Parce que, sauf si le type en cours d'initialisation est primitif, le compilateur créera en fait plusieurs copies inutiles de l'objet en cours de création lorsqu'il est alloué dans le corps du ctor. Cela peut potentiellement réduire les performances, selon le compilateur ainsi que les exigences évolutives de l'application.
Vous savez ce qu'est un délégué? Eh bien, en C++, il est connu comme un pointeur de fonction . Cette langue est assez difficile à maîtriser au début, mais si vous voulez être génial ... c'est définitivement requis.
C # est facile ... très facile.
Je recommanderais d'aller à Rosetta Code et de comparer les deux. Pendant que vous y êtes, gardez à portée de main un lien d'idiomes C++ et essayez de les repérer. Ensuite, passez du temps sur le domaine pointeur/référence/mémoire/destructeur. Après cela, apprenez-en plus sur le préprocesseur - ça peut vraiment être votre ami quand il s'agit de cacher les moches, ça me manque un peu. Enfin, la STL.