5 votes

Qu'est-ce que je peux m'attendre comme différence lorsque je passe de C & C# à C++?

Voici une question simple.

J'ai fait beaucoup de travail en utilisant à la fois C et C# (2.0) mais jamais rien en C++. À quoi dois-je m'attendre de différent en apprenant le C++? Y aura-t-il des grosses difficultés ou des obstacles auxquels je devrais faire attention? Est-ce que quelqu'un a de bonnes recommandations de livre/site web pour un cours intensif sur l'apprentissage du C++ pour le programmeur expérimenté?

2voto

spoulson Points 13391

Je suis passé d'Asm à C, C++, ... et plus récemment C#. C'est un soulagement de pouvoir instancier des objets et simplement les retourner à partir d'une méthode ou d'une propriété. En général, ni l'implémentation ni le code utilisateur n'ont besoin de se soucier de libérer cette mémoire. De plus, il n'y a aucune raison de renvoyer un code de statut, comme HRESULT, dans la plupart des cas car s'il y a un problème, vous lancez une exception et laissez le code utilisateur la gérer s'il le souhaite.

Ayant récemment rétrogradé vers du code natif en C++ pour mon dernier projet, je regrette vraiment la collecte des déchets et le lancer d'exceptions.

Cependant, j'aime les capacités de templating de C++. Un jour, C# devrait étendre cette technique.

1voto

Luc Hermitte Points 14171

Je vois plusieurs personnes soulignant la gestion de la mémoire comme un gros problème car vous devrez le faire manuellement. Eh bien, ne les croyez pas, c'est faux. À moins que vous ne soyez dans un environnement exotique/vieux jeu, C++ dispose des outils qui nous aident à gérer la mémoire (ainsi que toutes les autres ressources) de manière implicite et déterministe. Voir boost/std::tr1 shared_ptr<> et RAII.

La grande différence avec la mémoire collectée par GC : vous devrez vous occuper des cycles vous-même.

En ce qui concerne l'héritage multiple, une fois que vous aurez compris ce que l'ISP implique, ce n'est pas non plus un gros problème.

Je vais devoir concorder avec le message de pheze : Accelerated C++ est un incontournable si vous voulez apprendre comment C++ peut (/devrait ?) être utilisé.

1voto

gbjbaanb Points 31045

Jalf a tout à fait raison - venant d'un background C/C#, vous connaissez déjà pratiquement tout le C++ de base dont vous avez besoin, et vous connaissez aussi la POO, donc vous êtes pratiquement fini.

Deux choses me viennent à l'esprit qui seront nouvelles pour vous cependant:

  • RAII: cela vous permet d'avoir une gestion automatique de la mémoire, vous n'avez plus besoin de vous souvenir de tout libérer avec malloc. Cool non! Cela aide également avec toutes les autres ressources, vous n'avez plus à vous souvenir de fermer ce socket, ce fichier, cette connexion de base de données - RAII le fait pour vous. Ni C ni C# n'ont cela.

  • STL/Boost: c'est la "bibliothèque de classes C++", pleine d'utilitaires et de morceaux utiles. Tous les conteneurs standard sont dans la STL (comme les 'dictionnaires' et 'tableaux' et 'listes') ainsi que des algorithmes que vous pouvez leur appliquer (par exemple si vous avez une liste d'éléments de données, vous pouvez fournir un petit objet de fonction (appelé un foncteur) et ensuite passer les deux à un algorithme générique. C'est vraiment puissant, vous pouvez faire une tonne de travail en l'utilisant).

1voto

James Curran Points 55356

La principale différence est que C++ est basé sur la valeur tandis que C# est basé sur la référence.

En C#, lorsque vous passez un objet à une méthode, vous ne faites en réalité que passer une référence, donc la méthode appelante et la méthode appelée regardent toutes les deux le même objet.

En C++, lorsque vous passez un objet à une méthode, une copie de cet objet est faite et la copie entière est passée à la méthode. Les modifications apportées par la méthode appelée à la copie n'affectent pas l'original dans la méthode appelante. Le comportement par référence peut être simulé en C++ en utilisant la syntaxe de référence:

void somemethod(someclass& obj);

0voto

Sean Points 22088

Le plus grand "obstacle" sera probablement que vous serez responsable de libérer la mémoire que vous allouez

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X