Todas las respuestas hasta ahora se han centrado en el tema de su pregunta como se indicó, que es "cuál es la diferencia entre c y c ++". En realidad, parece que sabes cuál es la diferencia, simplemente no entiendes por qué necesitarías esa diferencia. Entonces, otras respuestas intentaron explicar la OO y la encapsulación.
Quería intervenir con otra respuesta, porque según los detalles de su pregunta, creo que debe retroceder varios pasos.
No comprende el propósito de C ++ u OO, porque para usted, parece que su aplicación simplemente necesita almacenar datos. Estos datos se almacenan en variables. "¿Por qué querría hacer que una variable fuera inaccesible? ¡Ahora ya no puedo acceder a ella! Al hacer que todo sea público, o mejor aún global, puedo leer datos desde cualquier lugar y no hay problemas". - Y tiene razón, según la escala de los proyectos que está escribiendo actualmente, probablemente no haya tantos problemas (o sí los hay, pero aún no se ha dado cuenta de ellos).
Creo que la pregunta fundamental que realmente debe haber respondido es: "¿Por qué querría ocultar datos? ¡Si hago eso, no puedo trabajar con ellos!" Y esta es la razón:
Digamos que comienza un nuevo proyecto, abre su editor de texto y comienza a escribir funciones. Cada vez que necesita almacenar algo (para recordarlo para más adelante), crea una variable. Para simplificar las cosas, hace que sus variables sean globales. Tu primera versión de tu aplicación funciona muy bien. Ahora comienza a agregar más funciones. Tiene más funciones, ciertos datos que almacenó antes deben leerse en su nuevo código. Otras variables necesitan ser modificadas. Sigues escribiendo más funciones. Lo que puede haber notado (o, si no, lo notará en el futuro) es que, a medida que su código se hace más grande, le toma más y más tiempo agregar la siguiente característica. Y a medida que su código se hace más grande, se hace cada vez más difícil agregar funciones sin romper algo que solía funcionar. ¿Por qué? Porque necesitas recordar lo que todosus variables globales son el almacenamiento y hay que recordar donde todos ellos están siendo modificados. Y debe recordar qué función está bien llamar en qué orden exacto y si las llama en un orden diferente , es posible que obtenga errores porque sus variables globales aún no son válidas. ¿Alguna vez te has topado con esto?
¿Qué tan grandes son sus proyectos típicos (líneas de código)? Ahora visualizando un proyecto de 5000 a 50000 veces más grande que el suyo. Además, hay varias personas trabajando en él. ¿Cómo pueden todos los miembros del equipo recordar (o incluso estar al tanto) de lo que están haciendo todas esas variables?
Lo que describí anteriormente es un ejemplo de código perfectamente acoplado. Y desde el comienzo de los tiempos (suponiendo que el tiempo comenzó el 1 de enero de 1970), la humanidad ha estado buscando formas de evitar estos problemas. La forma de evitarlos es dividiendo su código en sistemas, subsistemas y componentes y limitando cuántas funciones tienen acceso a cualquier dato. Si tengo 5 enteros y una cadena que representa algún tipo de estado, ¿sería más fácil para mí trabajar con este estado si solo 5 funciones establecen / obtienen los valores? o si 100 funciones establecen / obtienen estos mismos valores? Incluso sin los lenguajes OO (es decir, C), las personas han estado trabajando arduamente para aislar datos de otros datos y crear límites de separación limpios entre diferentes partes del código. Cuando el proyecto llega a un cierto tamaño, la facilidad de programación se convierte en "no puedo acceder a la variable X desde la función Y",
Es por eso que se han introducido los conceptos de OO y por eso son tan poderosos. Le permiten ocultar sus datos de usted mismo y desea hacerlo a propósito, porque cuanto menos código vea esos datos, menos posibilidades habrá de que, cuando agregue la siguiente función, rompa algo. Este es el propósito principal de los conceptos de encapsulación y programación OO. Le permiten dividir nuestros sistemas / subsistemas en cuadros aún más granulares, hasta un punto en el que, sin importar cuán grande sea el proyecto en general, solo se puede acceder a un conjunto de variables dado por 50-200 líneas de código y ¡eso es todo! Obviamente, hay mucho más en la programación OO, pero, en esencia, esta es la razón por la cual C ++ le ofrece opciones de declarar datos / funciones como privados, protegidos o públicos.
La segunda gran idea en OO es el concepto de capas de abstracción. Aunque los lenguajes de procedimiento también pueden tener abstracciones, en C, un programador debe hacer un esfuerzo consciente para crear tales capas, pero en C ++, cuando declara una clase, crea automáticamente una capa de abstracción (aún depende de usted si esta abstracción agregará o eliminará valor). Debería leer / investigar más sobre las capas de abstracción y, si tiene más preguntas, estoy seguro de que este foro estará encantado de responderlas también.