Todas as respostas até agora se concentraram no tópico de sua pergunta, como indicado, que é "qual é a diferença entre c e c ++". Na realidade, parece que você sabe qual é a diferença, você simplesmente não entende por que você precisaria dessa diferença. Então, outras respostas tentaram explicar OO e encapsulamento.
Eu queria falar 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 iria querer tornar uma variável inacessível? Agora não posso 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 você está escrevendo atualmente, provavelmente não há muitos problemas (ou existem, mas você ainda não se deu conta deles ainda).
Eu acho que a questão fundamental que você realmente precisa ter respondido é: "Por que eu iria querer esconder dados? Se eu fizer isso, não posso trabalhar com isso!" 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 para mais tarde), você cria uma variável. Para tornar as coisas mais simples, você torna suas variáveis globais. Sua primeira versão do seu aplicativo é excelente. Agora você começa a adicionar mais recursos. Você tem mais funções, certos dados armazenados antes precisam ser lidos do 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, você notará no futuro) é, à medida que seu código fica maior, você demora mais e mais para adicionar o próximo recurso. E à medida que seu código fica maior, fica cada vez mais difícil adicionar recursos sem quebrar algo que costumava funcionar. Por quê? Porque você precisa lembrar o que todas suas variáveis globais estão armazenando e você precisa lembrar onde todas delas estão sendo modificadas. E você precisa lembrar qual função é válida para chamar qual ordem exata e se você as chamar em uma ordem diferente , poderá receber erros porque suas variáveis globais não são bastante válido ainda. Você já se deparou com isso?
Qual é o tamanho dos seus projetos típicos (linhas de código)? Agora imaginando um projeto de 5000 a 50000 vezes maior que o seu. Além disso, existem várias pessoas trabalhando nele. Como todos da equipe podem 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 (assumindo que o tempo começou em 1º de janeiro de 1970), a espécie humana 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 inteiros e uma string que represente algum tipo de estado, seria mais fácil para mim trabalhar com este estado se apenas 5 funções configurassem / conseguissem os valores? ou se 100 funções configuradas / obtêm esses mesmos valores? Mesmo sem as linguagens OO (ou seja, 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 certo tamanho, a facilidade de programação não se torna "eu posso acessar a variável X da função Y", mas "como eu me certifico SOMENTE de funções A, B, C e ninguém mais está tocando na variável X".
É por isso que conceitos 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 que faça isso de propósito, porque quanto menos código vir esses dados, menor a chance de que, quando você adicionar o próximo recurso, você quebrar alguma coisa. Este é o objetivo principal dos conceitos de encapsulamento e programação OO. Eles permitem que você quebre nossos sistemas / subsistemas em caixas ainda mais granulares, a um ponto em que, não importa quão grande seja o projeto, um determinado conjunto de variáveis só pode ser acessado por 50-200 linhas de código e pronto! Obviamente, há muito mais para programação OO, mas, em essência, é por isso que o C ++ oferece opções para declarar dados / funções como privadas, protegidas ou públicas.
A segunda maior ideia 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, cria automaticamente uma camada de abstração (ainda depende de você irá 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 terá muito prazer em respondê-las também.