Tất cả các câu trả lời cho đến nay đều tập trung vào chủ đề câu hỏi của bạn như đã nêu, đó là "sự khác biệt giữa c và c ++" là gì. Trong thực tế, có vẻ như bạn biết sự khác biệt là gì, bạn chỉ không hiểu tại sao bạn lại cần sự khác biệt đó. Vì vậy, sau đó, các câu trả lời khác đã cố gắng giải thích OO và đóng gói.
Tôi muốn hòa nhập với một câu trả lời khác, bởi vì dựa trên các chi tiết của câu hỏi của bạn, tôi tin rằng bạn cần phải lùi lại vài bước.
Bạn không hiểu mục đích của C ++ hoặc OO, bởi vì với bạn, dường như ứng dụng của bạn chỉ cần lưu trữ dữ liệu. Dữ liệu này được lưu trữ trong các biến. "Tại sao tôi muốn biến một biến không thể truy cập? Bây giờ tôi không thể truy cập nó nữa! Bằng cách đặt mọi thứ ở chế độ công khai hoặc tốt hơn trên toàn cầu, tôi có thể đọc dữ liệu từ bất cứ đâu và không có vấn đề gì." - Và bạn đã đúng, dựa trên quy mô của các dự án bạn đang viết, có lẽ không có nhiều vấn đề (hoặc có, nhưng bạn chưa nhận thức được chúng).
Tôi nghĩ rằng câu hỏi cơ bản mà bạn thực sự cần phải trả lời là: "Tại sao tôi lại muốn ẩn dữ liệu? Nếu tôi làm điều đó, tôi không thể làm việc với nó!" Và đây là lý do:
Giả sử bạn bắt đầu một dự án mới, bạn mở trình soạn thảo văn bản của mình và bạn bắt đầu viết các chức năng. Mỗi khi bạn cần lưu trữ một cái gì đó (để ghi nhớ nó sau này), bạn tạo một biến. Để làm cho mọi thứ đơn giản hơn, bạn làm cho các biến của bạn toàn cầu. Phiên bản đầu tiên của ứng dụng của bạn chạy tuyệt vời. Bây giờ bạn bắt đầu thêm nhiều tính năng. Bạn có nhiều chức năng hơn, dữ liệu nhất định bạn đã lưu trữ từ trước khi cần phải đọc từ mã mới của bạn. Các biến khác cần được sửa đổi. Bạn tiếp tục viết nhiều chức năng hơn. Những gì bạn có thể nhận thấy (hoặc, nếu không, bạn hoàn toàn sẽ nhận thấy trong tương lai) là, khi mã của bạn trở nên lớn hơn, bạn sẽ mất nhiều thời gian hơn và lâu hơn để thêm tính năng tiếp theo. Và khi mã của bạn trở nên lớn hơn, việc thêm các tính năng trở nên khó hơn và khó hơn mà không phá vỡ thứ gì đó đã từng làm việc. Tại sao? Bởi vì bạn cần phải nhớ tất cả những gìcác biến toàn cục của bạn đang lưu trữ và bạn cần nhớ nơi tất cả chúng đang được sửa đổi. Và bạn cần nhớ chức năng nào là ổn để gọi theo thứ tự chính xác và nếu bạn gọi chúng theo thứ tự khác , bạn có thể gặp lỗi vì các biến toàn cục của bạn chưa hoàn toàn hợp lệ. Bạn đã bao giờ chạy vào đây?
Làm thế nào lớn là các dự án điển hình của bạn (dòng mã)? Bây giờ hình ảnh một dự án lớn gấp 5000 đến 50000 lần dự án của bạn. Ngoài ra, có nhiều người làm việc trong đó. Làm thế nào mọi người trong nhóm có thể nhớ (hoặc thậm chí nhận thức được) những gì tất cả các biến đó đang làm?
Những gì tôi mô tả ở trên là một ví dụ về mã được ghép hoàn hảo. Và kể từ buổi bình minh của thời gian (giả sử thời gian bắt đầu từ ngày 1 tháng 1 năm 1970), loài người đã tìm mọi cách để tránh những vấn đề này. Cách bạn tránh chúng là bằng cách chia mã của bạn thành các hệ thống, hệ thống con và các thành phần và giới hạn số lượng hàm có quyền truy cập vào bất kỳ phần dữ liệu nào. Nếu tôi có 5 số nguyên và một chuỗi đại diện cho một loại trạng thái nào đó, tôi có thể làm việc với trạng thái này dễ dàng hơn không nếu chỉ có 5 hàm đặt / nhận các giá trị? hoặc nếu 100 hàm đặt / nhận các giá trị tương tự? Ngay cả khi không có ngôn ngữ OO (ví dụ C), mọi người vẫn đang nỗ lực tách biệt dữ liệu khỏi dữ liệu khác và tạo ranh giới phân tách sạch giữa các phần khác nhau của mã. Khi dự án đạt đến một kích thước nhất định, việc lập trình trở nên dễ dàng, "tôi có thể truy cập biến X từ hàm Y" không,
Đây là lý do tại sao các khái niệm OO đã được giới thiệu và đây là lý do tại sao chúng rất mạnh mẽ. Chúng cho phép bạn ẩn dữ liệu của mình khỏi bạn và bạn muốn thực hiện nó một cách có chủ đích, bởi vì càng ít mã nhìn thấy dữ liệu đó, càng có ít cơ hội, khi bạn thêm tính năng tiếp theo, bạn sẽ phá vỡ thứ gì đó. Đây là mục đích chính cho các khái niệm đóng gói và lập trình OO. Chúng cho phép bạn chia các hệ thống / hệ thống con của chúng tôi thành các hộp nhỏ hơn, đến mức, cho dù dự án tổng thể lớn đến đâu, một tập hợp các biến đã cho chỉ có thể được truy cập bởi 50-200 dòng mã và đó là điều đó! Rõ ràng có nhiều hơn nữa để lập trình OO, nhưng, về bản chất, đây là lý do tại sao C ++ cung cấp cho bạn các tùy chọn khai báo dữ liệu / hàm là riêng tư, được bảo vệ hoặc công khai.
Ý tưởng lớn thứ hai trong OO là khái niệm về các lớp trừu tượng. Mặc dù các ngôn ngữ thủ tục cũng có thể có sự trừu tượng hóa, trong C, một lập trình viên phải nỗ lực có ý thức để tạo ra các lớp như vậy, nhưng trong C ++, khi bạn khai báo một lớp, bạn sẽ tự động tạo một lớp trừu tượng (tùy thuộc vào việc có trừu tượng hóa hay không sẽ thêm hoặc loại bỏ giá trị). Bạn nên đọc / nghiên cứu thêm về các lớp trừu tượng và nếu bạn có nhiều câu hỏi hơn, tôi chắc chắn diễn đàn này sẽ rất vui khi trả lời những câu hỏi đó.