Все ответы до сих пор были сфокусированы на теме вашего вопроса, как было сказано, а именно: «В чем разница между c и c ++». На самом деле, звучит так, будто вы знаете, в чем разница, вы просто не понимаете, зачем вам эта разница. Итак, другие ответы пытались объяснить ОО и инкапсуляцию.
Я хотел бы дать еще один ответ, потому что, основываясь на деталях вашего вопроса, я считаю, что вам нужно сделать несколько шагов назад.
Вы не понимаете цели C ++ или OO, потому что вам кажется, что вашему приложению просто необходимо хранить данные. Эти данные хранятся в переменных. «Почему я хочу сделать переменную недоступной? Теперь я больше не могу получить к ней доступ. Делая все общедоступным, или, что еще лучше, глобальным, я могу читать данные из любого места, и проблем нет». - И вы правы, исходя из масштаба проектов, которые вы сейчас пишете, вероятно, проблем не так много (или есть, но вы просто о них еще не узнали).
Я думаю, что основной вопрос, на который вы действительно должны ответить, это: «Зачем мне когда-либо хотеть скрывать данные? Если я это сделаю, я не смогу с этим работать!» И вот почему:
Допустим, вы начинаете новый проект, открываете текстовый редактор и начинаете писать функции. Каждый раз, когда вам нужно что-то сохранить (чтобы запомнить это позже), вы создаете переменную. Чтобы упростить ситуацию, вы сделаете свои переменные глобальными. Ваша первая версия вашего приложения работает отлично. Теперь вы начинаете добавлять больше функций. У вас есть больше функций, определенные данные, из которых вы хранили ранее, должны быть прочитаны из вашего нового кода. Другие переменные должны быть изменены. Вы продолжаете писать больше функций. Что вы, возможно, заметили (или, если нет, вы обязательно заметите в будущем), так как по мере того, как ваш код становится больше, вам потребуется все больше и больше времени, чтобы добавить следующую функцию. И по мере того, как ваш код становится больше, становится все труднее добавлять функции, не нарушая того, что раньше работало. Почему? Потому что вам нужно помнить, что всеваши глобальные переменные хранятся, и вы должны помнить, где все они изменяются. И вам нужно помнить, какую функцию можно вызывать в каком именно порядке, и если вы вызываете их в другом порядке, вы можете получить ошибки, потому что ваши глобальные переменные еще не совсем корректны. Вы когда-нибудь сталкивались с этим?
Насколько велики ваши типичные проекты (строки кода)? Теперь представьте проект в 5000 - 50000 раз больше вашего. Кроме того, в нем работают несколько человек. Как все в команде могут помнить (или даже знать), что делают все эти переменные?
То, что я описал выше, является примером идеально связанного кода. И с незапамятных времен (при условии, что время началось 1 января 1970 года), человеческий род искал способы избежать этих проблем. Чтобы избежать их, нужно разделить код на системы, подсистемы и компоненты и ограничить количество функций, имеющих доступ к любому фрагменту данных. Если бы у меня было 5 целых чисел и строка, представляющая какое-то состояние, мне было бы легче работать с этим состоянием, если бы только 5 функций устанавливали / получали значения? или если 100 функций устанавливают / получают те же значения? Даже без ОО-языков (например, C) люди усердно работали над изоляцией данных от других данных и созданием четких границ разделения между различными частями кода. Когда проект достигает определенного размера, простота программирования становится невозможной, «могу ли я получить доступ к переменной X из функции Y»,
Вот почему концепции ОО были введены, и именно поэтому они такие мощные. Они позволяют вам скрывать свои данные от себя, и вы хотите делать это специально, потому что чем меньше кода, который видит эти данные, тем меньше вероятность того, что при добавлении следующей функции вы что-то сломаете. Это основная цель концепций инкапсуляции и ОО-программирования. Они позволяют вам разбивать наши системы / подсистемы на еще более детализированные блоки до такой степени, что, независимо от того, насколько велик весь проект, к данному набору переменных можно получить доступ только через 50-200 строк кода, и все! Очевидно, что ОО-программирование гораздо больше, но, по сути, именно поэтому C ++ дает вам возможность объявлять данные / функции как частные, защищенные или общедоступные.
Второй величайшей идеей в ОО является концепция уровней абстракции. Хотя процедурные языки также могут иметь абстракции, в C программист должен сознательно приложить усилия для создания таких слоев, но в C ++, когда вы объявляете класс, вы автоматически создаете слой абстракции (это зависит от вас, является ли эта абстракция или нет добавит или удалит значение). Вы должны прочитать / исследовать больше об уровнях абстракции, и если у вас есть больше вопросов, я уверен, что этот форум будет более чем рад ответить на них.