Jusqu'à présent, toutes les réponses se sont concentrées sur le sujet de votre question comme indiqué, à savoir "quelle est la différence entre c et c ++". En réalité, il semble que vous sachiez quelle est la différence, vous ne comprenez tout simplement pas pourquoi vous auriez besoin de cette différence. Alors, d’autres réponses ont tenté d’expliquer l’OA et l’encapsulation.
Je voulais ajouter une autre réponse car, en fonction des détails de votre question, je pense que vous devez prendre plusieurs mesures en arrière.
Vous ne comprenez pas le but de C ++ ou de OO, car pour vous, il semble que votre application ait simplement besoin de stocker des données. Ces données sont stockées dans des variables. "Pourquoi voudrais-je rendre une variable inaccessible? Maintenant, je ne peux plus y accéder! En rendant tout public ou, mieux encore, global, je peux lire des données de n'importe où et il n'y a pas de problèmes." - Et vous avez raison, compte tenu de l'ampleur des projets que vous écrivez actuellement, il n'y a probablement pas beaucoup de problèmes (ou il y en a, mais vous ne vous en êtes pas encore rendu compte).
Je pense que la question fondamentale à laquelle vous devez réellement répondre est la suivante: "Pourquoi voudrais-je jamais cacher des données? Si je le fais, je ne peux pas travailler avec!" Et c'est pourquoi:
Disons que vous démarrez un nouveau projet, ouvrez votre éditeur de texte et commencez à écrire des fonctions. Chaque fois que vous avez besoin de stocker quelque chose (pour vous en souvenir plus tard), vous créez une variable. Pour simplifier les choses, vous rendez vos variables globales. Votre première version de votre application fonctionne très bien. Maintenant, vous commencez à ajouter plus de fonctionnalités. Vous avez plus de fonctions, certaines données que vous avez stockées auparavant doivent être lues à partir de votre nouveau code. D'autres variables doivent être modifiées. Vous continuez à écrire plus de fonctions. Ce que vous avez peut-être remarqué (ou, sinon, vous remarquerez absolument dans le futur), c’est que plus votre code grossit, plus il vous faudra de plus en plus pour ajouter la fonctionnalité suivante. Et à mesure que votre code grossit, il devient de plus en plus difficile d'ajouter des fonctionnalités sans endommager quelque chose qui fonctionnait auparavant. Pourquoi? Parce que vous devez vous rappeler ce que toutvos variables globales sont le stockage et vous avez besoin de se rappeler où tous d'entre eux sont en cours de modification. Et vous devez vous rappeler quelle fonction peut appeler dans quel ordre exact . Si vous les appelez dans un ordre différent , vous risquez de recevoir des erreurs car vos variables globales ne sont pas encore tout à fait valides. Avez-vous déjà rencontré cela?
Quelle est la taille de vos projets typiques (lignes de code)? Imaginez maintenant un projet 5000 à 50000 fois plus grand que le vôtre. En outre, plusieurs personnes y travaillent. Comment tous les membres de l'équipe peuvent-ils se souvenir (ou même être au courant) de ce que font toutes ces variables?
Ce que j'ai décrit ci-dessus est un exemple de code parfaitement couplé. Et depuis la nuit des temps (à partir du 1er janvier 1970), le genre humain a cherché des moyens d'éviter ces problèmes. Pour les éviter, divisez votre code en systèmes, sous-systèmes et composants et limitez le nombre de fonctions ayant accès à n'importe quelle donnée. Si j'ai 5 entiers et une chaîne représentant une sorte d'état, est-ce que ce serait plus facile pour moi de travailler avec cet état si seulement 5 fonctions définissaient / obtenaient les valeurs? ou si 100 fonctions définissent / obtiennent ces mêmes valeurs? Même sans les langages OO (c.-à-d. C), les utilisateurs ont travaillé dur pour isoler les données d’autres données et pour créer des limites de séparation nettes entre les différentes parties du code. Lorsque le projet atteint une certaine taille, la facilité de programmation ne devient plus "puis-je accéder à la variable X à partir de la fonction Y",
C'est pourquoi les concepts OO ont été introduits et pourquoi ils sont si puissants. Ils vous permettent de cacher vos données à vous-même et vous voulez le faire exprès, parce que moins de code voit ces données, moins il y a de chance que, lorsque vous ajoutez la fonctionnalité suivante, vous cassez quelque chose. C'est l'objectif principal des concepts d'encapsulation et de programmation orientée objet. Ils vous permettent de décomposer nos systèmes / sous-systèmes en des zones encore plus granulaires, à un point tel que, quelle que soit la taille du projet, un ensemble de variables donné ne peut être accédé que par 50-200 lignes de code, et c'est tout! Il y a évidemment beaucoup plus à la programmation OO, mais c'est essentiellement pour cette raison que C ++ vous offre des options pour déclarer des données / fonctions en tant que données privées, protégées ou publiques.
La deuxième idée la plus importante chez OO est le concept de couches d'abstraction. Bien que les langages procéduraux puissent également avoir des abstractions, en C, un programmeur doit faire un effort conscient pour créer de telles couches, mais en C ++, lorsque vous déclarez une classe, vous créez automatiquement une couche d'abstraction (c'est à vous de décider si cette abstraction ajoutera ou supprimera une valeur). Vous devriez lire / rechercher plus sur les couches d'abstraction et si vous avez plus de questions, je suis sûr que ce forum sera ravi de répondre à celles-ci également.