Semua jawaban sejauh ini berfokus pada topik pertanyaan Anda sebagaimana dinyatakan, yaitu "apa perbedaan antara c dan c ++". Pada kenyataannya, sepertinya Anda tahu apa perbedaannya, Anda hanya tidak mengerti mengapa Anda membutuhkan perbedaan itu. Maka, jawaban lain berusaha menjelaskan OO dan enkapsulasi.
Saya ingin menjawab dengan jawaban lain, karena berdasarkan perincian pertanyaan Anda, saya yakin Anda perlu mengambil beberapa langkah kembali.
Anda tidak mengerti tujuan C ++ atau OO, karena bagi Anda, tampaknya aplikasi Anda hanya perlu menyimpan data. Data ini disimpan dalam variabel. "Mengapa saya ingin membuat variabel tidak dapat diakses? Sekarang saya tidak dapat mengaksesnya lagi! Dengan membuat semuanya menjadi publik, atau lebih baik secara global, saya dapat membaca data dari mana saja dan tidak ada masalah." - Dan Anda benar, berdasarkan skala proyek yang sedang Anda tulis, mungkin tidak banyak masalah (atau ada, tetapi Anda belum menyadarinya).
Saya pikir pertanyaan mendasar yang benar-benar perlu Anda jawab adalah: "Mengapa saya ingin menyembunyikan data? Jika saya melakukan itu, saya tidak bisa mengatasinya!" Dan inilah sebabnya:
Katakanlah Anda memulai proyek baru, Anda membuka editor teks Anda dan Anda mulai menulis fungsi. Setiap kali Anda perlu menyimpan sesuatu (untuk mengingatnya nanti), Anda membuat variabel. Untuk mempermudah, Anda membuat variabel Anda mendunia. Versi pertama aplikasi Anda berjalan sangat baik. Sekarang Anda mulai menambahkan lebih banyak fitur. Anda memiliki lebih banyak fungsi, data tertentu yang Anda simpan sebelumnya perlu dibaca dari kode baru Anda. Variabel lain perlu dimodifikasi. Anda terus menulis lebih banyak fungsi. Apa yang mungkin Anda perhatikan (atau, jika tidak, Anda benar-benar akan melihat di masa depan) adalah, karena kode Anda semakin besar, Anda butuh waktu lebih lama untuk menambahkan fitur berikutnya. Dan saat kode Anda semakin besar, semakin sulit untuk menambahkan fitur tanpa merusak sesuatu yang dulu berfungsi. Mengapa? Karena kamu perlu mengingat semuanyavariabel global Anda disimpan dan Anda harus mengingat di mana semuanya sedang dimodifikasi. Dan Anda perlu mengingat fungsi mana yang boleh memanggil dalam urutan yang tepat dan jika Anda memanggilnya dalam urutan yang berbeda , Anda mungkin mendapatkan kesalahan karena variabel global Anda belum cukup valid. Apakah Anda pernah mengalami ini?
Seberapa besar proyek khas Anda (garis kode)? Sekarang pencitraan proyek 5000 hingga 50.000 kali lebih besar dari proyek Anda. Juga, ada beberapa orang yang bekerja di dalamnya. Bagaimana semua orang di tim dapat mengingat (atau bahkan menyadari) apa yang dilakukan semua variabel itu?
Apa yang saya jelaskan di atas adalah contoh kode yang digabungkan dengan sempurna. Dan sejak awal waktu (dengan asumsi waktu mulai 1 Januari 1970), manusia telah mencari cara untuk menghindari masalah ini. Cara Anda menghindarinya adalah dengan memecah kode Anda menjadi sistem, subsistem, dan komponen dan membatasi berapa banyak fungsi yang memiliki akses ke bagian data apa pun. Jika saya memiliki 5 bilangan bulat dan sebuah string yang mewakili semacam keadaan, apakah akan lebih mudah bagi saya untuk bekerja dengan keadaan ini jika hanya 5 fungsi yang mengatur / mendapatkan nilai? atau jika 100 fungsi mengatur / mendapatkan nilai yang sama? Bahkan tanpa bahasa OO (yaitu C), orang-orang telah bekerja keras untuk mengisolasi data dari data lain dan menciptakan batas pemisahan yang bersih antara berbagai bagian kode. Ketika proyek mencapai ukuran tertentu, kemudahan pemrograman menjadi tidak, "bisakah saya mengakses variabel X dari fungsi Y",
Inilah sebabnya mengapa konsep OO telah diperkenalkan dan inilah mengapa mereka begitu kuat. Mereka memungkinkan Anda untuk menyembunyikan data dari diri Anda sendiri dan Anda ingin melakukannya dengan sengaja, karena semakin sedikit kode yang melihat data itu, semakin sedikit kesempatan ada, bahwa ketika Anda menambahkan fitur berikutnya, Anda akan merusak sesuatu. Ini adalah tujuan utama untuk konsep enkapsulasi dan pemrograman OO. Mereka memungkinkan Anda untuk memecah sistem / subsistem kami menjadi kotak yang lebih terperinci, ke titik di mana, tidak peduli seberapa besar keseluruhan proyek, sekumpulan variabel tertentu hanya dapat diakses oleh 50-200 baris kode dan hanya itu! Jelas ada jauh lebih banyak untuk pemrograman OO, tetapi, pada dasarnya, inilah sebabnya C ++ memberi Anda pilihan untuk mendeklarasikan data / fungsi sebagai pribadi, dilindungi atau publik.
Ide terbesar kedua dalam OO adalah konsep lapisan abstraksi. Meskipun bahasa prosedural juga dapat memiliki abstraksi, dalam C, seorang programmer harus melakukan upaya sadar untuk membuat lapisan seperti itu, tetapi dalam C ++, ketika Anda mendeklarasikan sebuah kelas, Anda secara otomatis membuat lapisan abstraksi (itu masih terserah Anda apakah abstraksi ini atau tidak) akan menambah atau menghapus nilai). Anda harus membaca / meneliti lebih lanjut tentang lapisan abstraksi dan jika Anda memiliki lebih banyak pertanyaan, saya yakin forum ini akan dengan senang hati menjawabnya juga.