Beaucoup ont tendance à écrire "C/C++", comme si c'était la même chose. Bien qu'ils partagent de nombreuses similitudes, ils ne sont clairement pas les mêmes.
Mais quelles sont vraiment les différences fondamentales entre C et C++? C++ est-il une version améliorée de C, ou existe-t-il des fonctionnalités en C qui n'existent pas en C++?
Les points suivants concernent C++:
C++ a été inventé pour gérer la complexité que C ne pouvait pas gérer. Par exemple, un problème commun avec C était que vous pouviez "manquer de noms pour les variables" (à ne pas prendre à la lettre bien sûr) car il n'y avait pas d'encapsulation, d'espaces de noms, etc.
De plus, C n'a pas d'exceptions, donc la gestion des erreurs est très sujette aux erreurs, car cela dépend de l'utilisateur de la bibliothèque de toujours vérifier les valeurs de retour des fonctions, tandis qu'avec les exceptions, le développeur de la bibliothèque lève simplement une exception qui garantit que le flux du programme sera arrêté.
C++ aide en ayant le constructeur init objets qui est automatiquement appelé par le compilateur. Contrairement aux structures C qui doivent être initialisées par le programmeur (d'où une autre zone sujette aux erreurs).
Enfin, la POO offre de nombreux autres avantages, tels que la réutilisation des objets ainsi que les concepts génériques basés sur la programmation, tels que les modèles et les génériques qui vous permettent de réutiliser le code source, etc.
En général, tout ce qui existe en C est pris en charge en C++. Évidemment, le contraire est absolument faux.
Pour parler simplement, C++ est orienté objet (donc, par exemple, vous avez des classes), C ne l'est pas.
C++ a un type booléen C89 n'en a pas.
Ce sont des langues différentes. Ils partagent juste la plupart de la syntaxe.
C99 a quelques fonctionnalités qui n'existent pas (au moins exactement sous la même forme) en C++ (par exemple, les membres de tableau flexibles, les tableaux de longueur variable, etc.)
C99 a également ajouté beaucoup à la bibliothèque qui n'est pas présente dans la norme C++ 98/03; la plupart de ces éléments ont cependant été ajoutés à C++ 11.
En termes d'orientation de base, C prend essentiellement en charge la programmation procédurale structurée. C++ prend en charge cela ainsi que la programmation orientée objet, la programmation générique et la métaprogrammation (exécution de calculs arbitraires au moment de la compilation). Avec C++ 11, il ajoute quelques morceaux qui pourraient au moins être confondus avec le support de la programmation fonctionnelle (par exemple, les expressions lambda). C++ 14 en a ajouté quelques autres, mais la plupart d'entre eux sont vraiment plus pratiques que toute sorte de changement d'orientation majeur.
Personnellement, je pense que les modèles sont la fonctionnalité la plus importante que C++ ajoute à C.