Tutte le risposte finora si sono concentrate sull'argomento della tua domanda come indicato, che è "qual è la differenza tra c e c ++". In realtà, sembra che tu sappia qual è la differenza, semplicemente non capisci perché avresti bisogno di quella differenza. Quindi, altre risposte hanno tentato di spiegare OO e incapsulamento.
Volevo entrare in contatto con l'ennesima risposta, perché in base ai dettagli della tua domanda, credo che tu debba fare diversi passi indietro.
Non capisci lo scopo di C ++ o OO, perché a te sembra che la tua applicazione debba semplicemente archiviare i dati. Questi dati sono memorizzati in variabili. "Perché dovrei voler 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, in base alla scala dei progetti che stai scrivendo, probabilmente non ci sono molti problemi (o ci sono, ma non ne sei ancora consapevole).
Penso che la domanda fondamentale a cui devi veramente rispondere sia: "Perché dovrei mai voler nascondere i dati? Se lo faccio, non posso lavorarci!" Ed è per questo che:
Diciamo che inizi un nuovo progetto, apri il tuo editor di testo e inizi a scrivere funzioni. Ogni volta che devi memorizzare qualcosa (per ricordarlo per dopo), crei una variabile. Per semplificare le cose, rendi le tue variabili globali. La tua prima versione della tua app funziona alla grande. Ora inizi ad aggiungere altre funzionalità. Hai più funzioni, alcuni dati che hai archiviato prima devono essere letti dal tuo nuovo codice. Altre variabili devono essere modificate. Continui a scrivere più funzioni. Quello che potresti aver notato (o, in caso contrario, lo noterai assolutamente in futuro) è che, man mano che il tuo codice diventa più grande, ci vuole sempre più tempo per aggiungere la funzione successiva. E man mano che il codice diventa più grande, diventa sempre più difficile aggiungere funzionalità senza interrompere qualcosa che funzionava. Perché? Perché devi ricordare cosa tuttole variabili globali sono la memorizzazione ed è necessario ricordare dove tutto di loro vengono modificati. E devi ricordare quale funzione va bene chiamare in quale ordine esatto e se le chiami in un ordine diverso , potresti ricevere errori perché le tue variabili globali non sono ancora del tutto valide. Ti sei mai imbattuto in questo?
Quanto sono grandi i tuoi progetti tipici (righe di codice)? Ora immagini un progetto da 5000 a 50000 volte più grande del tuo. Inoltre, ci sono più persone che ci lavorano. Come possono tutti i membri del team ricordare (o anche essere consapevoli di) cosa stanno facendo tutte quelle variabili?
Quello che ho descritto sopra è un esempio di codice perfettamente accoppiato. E fin dagli albori del tempo (supponendo che il tempo sia iniziato il 1 ° gennaio 1970), il genere umano ha cercato modi per evitare questi problemi. Il modo per evitarli è suddividere il codice in sistemi, sottosistemi e componenti e limitare il numero di funzioni che hanno accesso a qualsiasi dato. Se ho 5 numeri interi e una stringa che rappresentano un qualche tipo di stato, sarebbe più facile per me lavorare con questo stato se solo 5 funzioni impostassero / ottengano i valori? o se 100 funzioni impostano / ottengono questi stessi valori? Anche senza i linguaggi OO (cioè C), le persone hanno lavorato duramente per isolare i dati da altri dati e creare confini di separazione netti tra le diverse parti del codice. Quando il progetto raggiunge una certa dimensione, la facilità di programmazione non diventa "posso accedere alla variabile X dalla funzione Y",
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 stesso e vuoi farlo apposta, perché meno codice vede quei dati, meno possibilità ci sono che quando aggiungi la prossima funzione, rompi qualcosa. Questo è lo scopo principale dei concetti di incapsulamento e programmazione OO. Ti consentono di suddividere i nostri sistemi / sottosistemi in caselle ancora più granulari, al punto in cui, indipendentemente da quanto sia grande il progetto complessivo, un determinato set di variabili è accessibile solo da 50-200 righe di codice e basta! Ovviamente c'è molto di più nella programmazione OO, ma, in sostanza, questo è il motivo per cui C ++ ti offre la possibilità di dichiarare dati / funzioni come privati, protetti o pubblici.
La seconda idea più grande in OO è il concetto di strati di astrazione. Sebbene i linguaggi procedurali possano anche avere astrazioni, in C, un programmatore deve fare uno sforzo consapevole per creare tali livelli, ma in C ++, quando dichiari una classe, crei automaticamente un livello di astrazione (dipende ancora da te se questa astrazione è o meno aggiungerà o rimuoverà il valore). Dovresti leggere / ricercare di più sui livelli di astrazione e se hai più domande, sono sicuro che questo forum sarà più che felice di rispondere anche a questi.