Tutte le risposte finora si sono concentrate sull'argomento della tua domanda come affermato, che è "qual è la differenza tra c e c ++". In realtà, sembra che tu sappia qual è la differenza, semplicemente non capisci perché hai bisogno di quella differenza. Quindi, altre risposte hanno tentato di spiegare OO e incapsulamento.
Volevo inserire un'altra risposta, perché in base ai dettagli della tua domanda, credo che sia necessario fare diversi passi indietro.
Non capisci lo scopo di C ++ o OO, perché a te sembra che l'applicazione abbia semplicemente bisogno di memorizzare i dati. Questi dati sono memorizzati in variabili.
"Perché dovrei rendere inaccessibile una variabile? Ora non posso più accedervi! Rendendo tutto pubblico, o meglio ancora globale, posso leggere i dati da qualsiasi luogo e non ci sono problemi." - E hai ragione, sulla base della scala dei progetti che stai attualmente scrivendo, probabilmente non ci sono molti problemi (o ci sono, ma non li hai ancora conosciuti).
Penso che la domanda fondamentale a cui devi veramente rispondere sia: "Perché mai dovrei nascondere i dati? Se lo faccio, non posso lavorarci!"
E questo è il motivo:
Diciamo che inizi un nuovo progetto, apri il tuo editor di testo e inizi a scrivere funzioni. Ogni volta che è necessario memorizzare qualcosa (per ricordarlo per dopo), si crea una variabile. Per semplificare le cose, rendi globali le tue variabili.
La tua prima versione della tua app funziona alla grande. Ora inizi ad aggiungere più funzionalità. Hai più funzioni, alcuni dati che hai memorizzato da prima devono essere letti dal tuo nuovo codice. Altre variabili devono essere modificate. Continui a scrivere più funzioni.
Ciò che potresti aver notato (o, in caso contrario, noterai assolutamente in futuro) è che, man mano che il tuo codice si ingrandisce, ti occorrerà sempre più tempo per aggiungere la funzione successiva. E man mano che il tuo codice diventa più grande, diventa sempre più difficile aggiungere funzionalità senza rompere qualcosa che prima funzionava.
Perché?
Perché devi ricordare quali tutte le tue variabili globali stanno memorizzando e devi ricordare dove tutti sono in corso di modifica. E devi ricordare quale funzione è accettabile per chiamare quale esatto ordine e se li chiami in un diverso ordine, potresti ottenere errori perché le tue variabili globali non sono abbastanza valido ancora.
Ti sei mai imbattuto in questo?
Quanto sono grandi i tuoi progetti tipici (linee di codice)?
Ora immagina un progetto da 5000 a 50000 volte più grande del tuo. Inoltre, ci sono più persone che ci lavorano. In che modo tutti nel team possono ricordare (o persino essere consapevoli) di ciò che stanno facendo tutte quelle variabili?
Quello che ho descritto sopra è un esempio di codice perfettamente accoppiato. E sin dall'alba dei tempi (ipotizzando che il tempo inizi il 1 ° gennaio 1970), il genere umano ha cercato modi per evitare questi problemi. Il modo in cui li eviti è suddividendo il tuo codice in sistemi, sottosistemi e componenti e limitando il numero di funzioni che hanno accesso a qualsiasi parte di dati.
Se ho 5 interi e una stringa che rappresenta un qualche tipo di stato, sarebbe più facile per me lavorare con questo stato se solo 5 funzioni impostano / ottengono i valori? o se 100 funzioni impostano / ottengono questi stessi valori?
Anche senza i linguaggi OO (ad esempio C), le persone hanno lavorato duramente per isolare i dati da altri dati e creare netti confini di separazione tra diverse parti del codice. Quando il progetto raggiunge una certa dimensione, la facilità di programmazione diventa "posso accedere alla variabile X dalla funzione Y", ma "come faccio a garantire SOLO le funzioni A, B, C e nessun altro tocca la variabile X".
Questo è il motivo per cui sono stati introdotti concetti OO ed è per questo che sono così potenti. Ti permettono di nascondere i tuoi dati da te e tu vuoi a farlo apposta, perché meno codice che vede quei dati, meno possibilità ci sono, che quando aggiungi la prossima funzione, lo farai rompere qualcosa. Questo è lo scopo principale dei concetti di incapsulamento e programmazione OO. Permettono di rompere i nostri sistemi / sottosistemi in scatole ancora più granulari, fino al punto in cui, indipendentemente da quanto sia grande il progetto complessivo, un determinato insieme di variabili può essere raggiunto solo da 50-200 righe di codice e il gioco è fatto! Ovviamente c'è molto di più nella programmazione OO, ma, in sostanza, questo è il motivo per cui C ++ ti offre le opzioni per dichiarare dati / funzioni come privati, protetti o pubblici.
La seconda idea più grande in OO è il concetto di livelli di astrazione. Sebbene i linguaggi procedurali possano anche avere astrazioni, in C, un programmatore deve fare uno sforzo cosciente per creare tali livelli, ma in C ++, quando si dichiara una classe, si crea automaticamente un livello di astrazione (dipende comunque da te se questa astrazione o meno aggiungerà o rimuoverà il valore). Dovresti leggere / ricercare di più sui livelli di astrazione e se hai altre domande, sono certo che questo forum sarà più che felice di rispondere anche a quelle.