Até agora, todas as respostas se concentraram no tópico de sua pergunta, que é "qual é a diferença entre c e c ++". Na realidade, parece que você sabe o que é diferença, mas simplesmente não entende por que precisaria dessa diferença. Então, outras respostas tentaram explicar OO e encapsulamento.
Queria entrar em contato com mais uma resposta, porque, com base nos detalhes da sua pergunta, acredito que você precisa dar vários passos para trás.
Você não entende o propósito de C ++ ou OO, porque para você, parece que seu aplicativo simplesmente precisa armazenar dados. Esses dados são armazenados em variáveis. "Por que eu gostaria de tornar uma variável inacessível? Agora não consigo mais acessá-la! Ao tornar tudo público, ou melhor ainda, global, posso ler dados de qualquer lugar e não há problemas." - E você está certo, com base na escala dos projetos que está escrevendo atualmente, provavelmente não existem muitos problemas (ou existem, mas você ainda não os percebeu).
Acho que a pergunta fundamental que você realmente precisa responder é: "Por que eu iria querer ocultar dados? Se faço isso, não posso trabalhar com eles!" E é por isso que:
Digamos que você inicie um novo projeto, abra seu editor de texto e comece a escrever funções. Toda vez que você precisa armazenar algo (para lembrá-lo mais tarde), você cria uma variável. Para simplificar, você torna suas variáveis globais. Sua primeira versão do seu aplicativo é ótima. Agora você começa a adicionar mais recursos. Você tem mais funções, alguns dados armazenados antes precisam ser lidos em seu novo código. Outras variáveis precisam ser modificadas. Você continua escrevendo mais funções. O que você pode ter notado (ou, se não, absolutamente notará no futuro) é que, à medida que seu código aumenta, você leva mais e mais tempo para adicionar o próximo recurso. E à medida que seu código aumenta, fica cada vez mais difícil adicionar recursos sem interromper algo que costumava funcionar. Por quê? Porque você precisa lembrar o que todossuas variáveis globais estão armazenando e você precisa se lembrar de onde todas elas estão sendo modificadas. E você precisa se lembrar de qual função é adequada chamar em que ordem exata e, se você chamá-las em uma ordem diferente , poderá receber erros porque suas variáveis globais ainda não são válidas. Você já se deparou com isso?
Qual o tamanho dos seus projetos típicos (linhas de código)? Agora, crie um projeto de 5000 a 50000 vezes maior que o seu. Além disso, existem várias pessoas trabalhando nele. Como todos na equipe podem se lembrar (ou mesmo estar cientes) do que todas essas variáveis estão fazendo?
O que eu descrevi acima é um exemplo de código perfeitamente acoplado. E desde o início dos tempos (supondo que o tempo tenha começado em 1º de janeiro de 1970), a humanidade tem procurado maneiras de evitar esses problemas. A maneira de evitá-los é dividindo seu código em sistemas, subsistemas e componentes e limitando quantas funções têm acesso a qualquer parte dos dados. Se eu tiver 5 números inteiros e uma string que represente algum tipo de estado, seria mais fácil trabalhar com esse estado se apenas 5 funções configurassem / obtivessem os valores? ou se 100 funções definem / obtêm esses mesmos valores? Mesmo sem as linguagens OO (isto é, C), as pessoas têm trabalhado duro para isolar dados de outros dados e criar limites de separação limpos entre diferentes partes do código. Quando o projeto chega a um determinado tamanho, a facilidade de programação não é ", posso acessar a variável X da função Y",
É por isso que os conceitos de OO foram introduzidos e é por isso que eles são tão poderosos. Eles permitem que você esconda seus dados de si mesmo e você deseja fazê-lo de propósito, porque quanto menos código visualizar esses dados, menor a chance de que, ao adicionar o próximo recurso, você quebre alguma coisa. Esse é o principal objetivo dos conceitos de encapsulamento e programação OO. Eles permitem que você divida nossos sistemas / subsistemas em caixas ainda mais granulares, a um ponto em que, não importa quão grande seja o projeto geral, um determinado conjunto de variáveis só pode ser acessado por 50-200 linhas de código e pronto! Obviamente, há muito mais na programação OO, mas, em essência, é por isso que o C ++ oferece opções de declaração de dados / funções como privada, protegida ou pública.
A segunda maior idéia em OO é o conceito de camadas de abstração. Embora as linguagens procedurais também possam ter abstrações, em C, um programador deve fazer um esforço consciente para criar essas camadas, mas em C ++, quando você declara uma classe, você cria automaticamente uma camada de abstração (ainda é sua decisão se essa abstração é ou não adicionará ou removerá valor). Você deve ler / pesquisar mais sobre as camadas de abstração e, se tiver mais perguntas, tenho certeza de que este fórum ficará mais do que feliz em respondê-las.