Récemment, j’ai eu une demande d’un développeur C# qui avait besoin de se former à C++ et qui était perplexe sur la formation C++ à suivre. Initiation ? Perfectionnement ? Auto apprentissage avec des tutoriels sur Internet ?
Formations Initiation ou Perfectionnement à C++ ?
Une formation Initiation C++ est en effet souvent destinée à des débutants en programmation orientée objet et comporte une part importante sur la syntaxe de base du langage, comme les types de variables et leur portée, les opérateurs, les structures de test et de boucle, les fonctions, les définitions de classes, l’héritage. Or ces notions sont très voisines de celles rencontrées en C# et un développeur C# va profondément s’ennuyer une grande partie de la formation.
Une formation Perfectionnement C++ peut sembler plus adaptée, mais elle s’appuie sur des connaissances de base de C++ qui vont manquer ou ne pas être maitrisées par le développeur C# : comprendre les smart pointer quand on ne maitrise pas les raw pointeurs, les opérations à effectuer dans un destructeur ou la règle des trois ou des cinq est loin d’être évident.
Auto apprentissage sur Internet ?
La solution de l’auto apprentissage est pire, car elle sera soit ennuyeuse comme la formation Initiation, soit laissera de coté des éléments majeurs de différences entre C++ et C# : l’instruction delete, l’instanciation de classe dans la pile, le principe de RAII, …
Les points à aborder
A partir d’une formation Initiation C++, j’ai établi une liste des points à développer spécifiquement pour proposer un programme spécifique. En voici un résumé.
- Mécanisme du préprocesseur
- Allocation mémoire des variables – cycle de vie – delete
- Pointeur et référence
- Différences entre les structures C# et les structures C++
- Différences entre le polymorphisme en C# et en C++
- Constructeur copy, move – règle des trois et des cinq
- Héritage multiple – comparaison avec les interfaces de C#
- Inférence de type
- Flux d’entrée-sortie
- Template – différences avec la généricité de C#
- Conteneur et itérateurs – différences avec la généricité de C#
- Pointeurs de fonctions, objet « function » – différence avec les delegate de C#
- fonctions lambda
- smart pointer
Si vous êtes un développeur C# qui s’est formé à C++, avez vous eu des difficultés particulières ? Ou voyez vous d’autres points sur lesquels insister ?