Hasta ahora, todas las respuestas se han centrado en el tema de su pregunta tal como se indica, que es "cuál es la diferencia entre c y c ++". En realidad, parece que sabes qué 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 hacer una respuesta con otra respuesta, porque según los detalles de tu pregunta, creo que necesitas retroceder varios pasos.
No entiendes el propósito de C ++ u OO, porque para ti, parece que tu aplicación simplemente necesita almacenar datos. Estos datos se almacenan en variables.
"¿Por qué querría hacer que una variable sea inaccesible? ¡Ahora 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 muchos problemas (o los hay, pero aún no se ha dado cuenta de ellos).
Creo que la pregunta fundamental que realmente necesitas responder es: "¿Por qué querría ocultar los datos? ¡Si hago eso, no puedo trabajar con eso!"
Y es por esto que:
Supongamos que inicia un nuevo proyecto, abre su editor de texto y comienza a escribir funciones. Cada vez que necesitas almacenar algo (para recordarlo más adelante), creas una variable. Para hacer las cosas más simples, haces tus variables globales.
Su primera versión de su aplicación funciona muy bien. Ahora empiezas a agregar más características. Tiene más funciones, ciertos datos que almacenó antes deben leerse desde 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 crece, le lleva más tiempo agregar la siguiente función. Y a medida que su código crece, cada vez es más difícil agregar funciones sin romper algo que solía funcionar.
¿Por qué?
Porque necesita recordar qué todas están almacenando sus variables globales y necesita recordar dónde se están modificando todas . Y debe recordar qué función es aceptable para llamar en qué orden exacto y si los llama en un orden diferente , puede obtener errores porque sus variables globales no están bastante valido todavia
¿Alguna vez te has encontrado con esto?
¿Qué tan grandes son tus proyectos típicos (líneas de código)?
Ahora imagina un proyecto de 5000 a 50000 veces más grande que el tuyo. Además, hay varias personas que trabajan en él. ¿Cómo pueden todos los miembros del equipo recordar (o incluso saber) qué están haciendo todas esas variables?
Lo que describí anteriormente es un ejemplo de código perfectamente acoplado. Y desde el principio de los tiempos (asumiendo 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 la cantidad de funciones que 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 configuran / obtienen los valores? ¿O si 100 funciones configuran / obtienen estos mismos valores?
Incluso sin lenguajes OO (es decir, C), las personas han estado trabajando duro para aislar los datos de otros datos y crear límites de separación limpios entre las diferentes partes del código. Cuando el proyecto alcanza un cierto tamaño, la facilidad de la programación no lo es, "puedo acceder a la variable X desde la función Y", pero "cómo me aseguro de que SOLO funcionen las funciones A, B, C y nadie más toque la variable X".
Esta es la razón por la 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, ya que cuanto menor sea el código que vea esos datos, menor será la probabilidad de que cuando agregue la siguiente función, romper algo. Este es el propósito principal de los conceptos de encapsulación y programación OO. Le permiten dividir nuestros sistemas / subsistemas en cajas aún más granulares, hasta un punto donde, sin importar qué tan 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 de OO, pero, en esencia, esta es la razón por la que C ++ le ofrece opciones para declarar datos / funciones como privadas, protegidas o públicas.
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 quitará 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 también estará encantado de responderlas.