web-dev-qa-db-fra.com

C ++ pour les développeurs C #

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.

27
Mark Williams

Ce fil sur C++ pour Java sont très similaires et devraient être utiles, en particulier le post de Mark Byer:

Lisez ces livres:

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.

11
Rei Miyasaka

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.

14
DeadMG

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.

9
gbjbaanb

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:

http://geekswithblogs.net/mikebmcl/archive/2012/02/14/c-to-cndasha-somewhat-short-guide-update-1.aspx

La page ci-dessus contient maintenant un lien mort vers une version pdf. Voici le pdf archivé .

Bon apprentissage :)

7
Chris
  • Faites attention à la gestion de la mémoire. Obtenez une idée claire du fonctionnement des pointeurs et des références en C++ contrairement à C #. En outre, RAII, enfin la gestion manuelle de la mémoire et les pointeurs intelligents.
  • Les modèles et les génériques se ressemblent mais sont des bêtes différentes. Apprenez à connaître le fonctionnement des modèles.
  • Il existe des différences syntaxiques minuscules mais accrocheuses. Apprenez-les.
  • Vous vous êtes habitué à STL au lieu de .net BCL. Vous allez peut-être manquer de bons morceaux si vous avez une dépendance à LINQ.
  • Il existe des différences de conception fondamentales entre C++ et C #. Donc, vous ne pouvez pas simplement porter une idée. Tout ce que vous construisez avec C++, vous devez le concevoir à partir de zéro.
  • Bonne chance
4
Gulshan

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.

1
DPD

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.

1
about blank

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.

1
Mark