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 elle n'est pas très approfondie.
Je peux rassembler plusieurs sources mais j'ai pensé qu'il y avait quelque chose - je ne le trouve pas. Merci de votre aide.
Réponses:
Ce fil sur C ++ pour les développeurs Java est très similaire et devrait être utile, en particulier le post de Mark Byer:
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 était issu de Java 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 entré dans la partie POO du programme (Dieu merci). Rien de ce qu'il a démontré n'aurait compilé. Il ne comprenait pas qu'il
char[]
fallait une sentinelle\0
. Ne finissez pas comme lui.la source
char[]
alors , n'est-ce pas?char[]
soit rarement utilisé en C ++ ne signifie pas qu'il n'est pas enseigné ou qu'il ne devrait pas l'être.char[]
est toujours important d'être conscient parce que C ++ est un surensemble de C, et il est impératif qu'il soit bien compris s'il doit être appris.std::string
, et si vous devez interagir avec une API C, c'est à cela quec_str()
sert. Il n'y a aucun besoin pour le programmeur de gérerchar[]
ou de résiliation NULL dans tout cela. La gestion des chaînes de style C est complètement et totalement et totalement déconseillée pour chaque utilisation possible, sauf l'interopérabilité avec l'ancien code C, qui est parfaitement bien géré parc_str()
.char[]
, car toutes les utilisations dechar[]
sont fausses. Votre professeur aurait probablement été très bien s'il s'était contenté de C ++ au lieu de C.Malheureusement, il n'y a pas grand-chose sur le C ++ qui est 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.
la source
cout
et des moyens simples pour atteindre des objectifs simplesIl 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 C (pour obtenir une mise à la terre des trucs 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.
la source
reading up on C programming
. Je pense que cela fait plus de mal que de bien et confirme l'idée que le C et le C ++ sont des langages qui doivent être étudiés ensemble.delete
et les tableaux C et d'autres choses qui sont découragés en C ++ qu'ils ne l'ont fait, ce que j'attribue à NE PAS étudier explicitement C.C est relativement simple, vous pouvez comprendre assez rapidement ce que fait le code.malloc
etfree
. Un grand développeur C ++ voudra éventuellement les connaître. Commencer par eux est une tout autre chose.Je ne sais pas si vous êtes toujours à la recherche de 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
Bon apprentissage :)
la source
la source
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 de POO, vous pouvez ignorer les longues introductions aux concepts de POO (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.
la source
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 - cela peut vraiment être votre ami quand il s'agit de cacher les moches, ça me manque un peu. Enfin, la STL.
la source
Il y a environ un an, j'étais dans le même bateau que vous: c # dev autodidacte qui ressentait le besoin d'apprendre le C ++. Certes, je me suis arrêté et j'ai recommencé 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 ce que les méthodes de manipulation de données par le biais de pointeurs et de références signifient réellement , ainsi que quand et comment les utiliser dans les circonstances.
La bonne chose à propos de C ++ est que l'allocation de 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 qu'à moins que le type en cours d'initialisation ne soit 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.
la source
Croyez-moi, choisissez un bon livre sur C ++ (il y en a beaucoup plus, faites juste une recherche) et commencez à apprendre ...
la source