Trước khi chúng ta hiểu sự khác biệt giữa Class và Struct, chúng ta nên biết một vài khái niệm cơ bản liên quan đến chúng. Không có sự hiểu biết về các khái niệm, rất khó để hiểu được sự khác biệt giữa hai khái niệm.
Đây là hai khái niệm quan trọng liên quan đến Lập trình hướng đối tượng và chúng là cơ sở để đóng khung các chức năng và dữ liệu truyền sang các chức năng khác. Để hiểu rõ hơn, chúng ta có thể tương quan nó với một ví dụ thực tế. Một Class có thể được coi là một cửa hàng và một Object có thể là bất kỳ cửa hàng riêng lẻ nào, cụ thể như tạp hóa, văn phòng phẩm, trái cây, v.v ... Tất cả các đối tượng đều có chung các thuộc tính của lớp chính - cửa hàng - và lần lượt, các đối tượng có thể có các thuộc tính độc quyền của riêng chúng như thiết kế cụ thể, ánh sáng, v.v ... Thông qua các đối tượng, chúng ta thực sự có thể sử dụng lớp; chúng tạo thành các thể hiện của một lớp.
Cú pháp của một lớp
Cửa hàng lớp học
những thứ chuỗi công khai;
thiết kế chuỗi công cộng;
Cú pháp của một đối tượng
Cửa hàng tạp hóa = Cửa hàng mới ();
Cửa hàng Văn phòng phẩm = Cửa hàng mới ();
Một Struct chỉ bao gồm dữ liệu và do đó rất hữu ích trong việc đóng khung các yêu cầu dữ liệu riêng lẻ thông qua các đối tượng Struct. Không giống như một lớp, nó thiếu chức năng. Đây là cú pháp của nó:
struct g tạp chí_entrance
char entry_name [50];
int entry_size;
tạp hóa_entrance;
Tất cả các cửa hàng có thể sử dụng 'lối vào' của Struct với tên và kích thước riêng.
Nó tương tự như cách một đứa con trai thừa hưởng tài sản của cha mình và đến lượt nó, con trai cũng có thể thêm một số tài sản khác của riêng mình. Lớp có thể là lớp cơ sở hoặc lớp dẫn xuất, trong đó lớp trước có thể được lấy làm cơ sở để tạo thành lớp sau. Lớp dẫn xuất thêm một vài thuộc tính khác cho chính nó ngoài những gì nó nhận được từ lớp cơ sở. Khi chúng tôi xem xét ví dụ trên, cửa hàng tạp hóa vẫn có thể được dẫn đến một cửa hàng tạp hóa cụ thể, chẳng hạn như cửa hàng tạp hóa XYZ.
Bây giờ chúng ta đã quen với các khái niệm cơ bản, chúng ta có thể đi vào sự khác biệt thực tế giữa Class và Struct.
Demo obj = Demo mới ();
Điều này có nghĩa là chúng ta phải sử dụng từ khóa 'mới' trong khi tạo các đối tượng của một lớp. Điều này là không bắt buộc khi tạo các đối tượng của Structs. Chỉ cần nhìn vào cú pháp của họ:
Demo obj;
Nó hoạt động hoàn hảo ngay cả khi không có từ khóa 'mới'.
Vì các Class linh hoạt hơn trong việc bàn giao dữ liệu và các chức năng với nhau, chúng ta có thể thực hiện nó khi các đối tượng được sử dụng rất phức tạp và lớn. Trong ví dụ của chúng tôi, một Mall có thể sử dụng lớp 'store' để thể hiện hệ thống theo cách tốt hơn. Tuy nhiên, các cấu trúc được giới hạn trong các đối tượng nhỏ hơn, vì chúng tương đối kém hiệu quả hơn các Class. Do đó, nếu bạn thiết kế một cửa hàng của riêng mình, Structs là lựa chọn tốt hơn.
Bạn có thể đã nghe các thuật ngữ 'quyền anh' và 'unboxing' để chuyển đổi một cấu trúc thành một lớp và ngược lại. Mặc dù đây là các quy trình hiệu quả để giúp chúng tôi chuyển đổi, nhưng chúng nên được xử lý một cách thận trọng. Vì điều này ảnh hưởng trực tiếp đến các vị trí bộ nhớ, có tác động rất lớn đến hiệu suất của hệ thống của chúng tôi. Hơn nữa, nó ảnh hưởng đến các quy trình thu gom rác và dẫn đến hệ thống không hiệu quả. Do đó, chỉ sử dụng các chuyển đổi này khi cần thiết.
Chúng ta hãy xem xét sự khác biệt nêu trên ở dạng bảng.
S.Không | Các khái niệm | Sự khác biệt | |
Lớp học | Cấu trúc | ||
1 | Tái sử dụng | Hoàn toàn có thể sử dụng lại | Không thể tái sử dụng |
2 | Hiển thị | Tất cả các chức năng của một Class được hiển thị cho các đối tượng của nó | Dữ liệu của một đối tượng của một cấu trúc không hiển thị cho các đối tượng khác của cùng một cấu trúc |
3 | Vượt qua tham chiếu & vượt qua giá trị | Sử dụng thông qua tham khảo | Sử dụng theo giá trị |
4 | Di sản | Các chức năng của một lớp có thể được kế thừa bởi các lớp con của nó; cho phép thừa kế | Không bao giờ cho phép thừa kế |
5 | Hiển thị mặc định | Tất cả các thành viên của Class đều ở chế độ riêng tư theo mặc định | Tất cả các thành viên của Struct đều được công khai theo mặc định |
6 | Kích thước khi trống | Kích thước của một lớp trống là 1 Byte | Kích thước của Struct trống là 0 Byte |
7 | Thu gom rác thải | Vì nó sử dụng pass bằng tham chiếu, nên có thể thu gom rác | Vì nó sử dụng pass by value, không thể thu gom rác |
số 8 | Quản lý bộ nhớ | Sự dễ dàng của quy trình thu gom rác giúp quản lý bộ nhớ hiệu quả | Việc thiếu bộ sưu tập rác dẫn đến việc quản lý bộ nhớ kém |
9 | Người xây dựng | Cho phép các nhà xây dựng của tất cả các loại, chẳng hạn như có hoặc không có tham số | Chỉ cho phép các nhà xây dựng tham số |
10 | Phá hủy | Co thể dùng nó | Không thể sử dụng nó |
11 | Thành viên khởi tạo biến | Cho phép khởi tạo trực tiếp các biến thành viên | Không cho phép khởi tạo từ trực tiếp của các biến thành viên |
12 | Tạo đối tượng | Phải sử dụng từ khóa 'mới' trong quá trình tạo đối tượng | Tùy chọn sử dụng từ khóa 'mới' trong quá trình tạo đối tượng |
13 | Khi nào sử dụng? | Tốt hơn cho các đối tượng lớn hơn và phức tạp, nơi cần có sự kế thừa | Tốt hơn cho các đối tượng nhỏ hơn và đơn giản hơn, nơi kế thừa ít quan trọng hơn. |
Chúng tôi gần như đã đề cập đến tất cả sự khác biệt giữa Class và Struct và nếu bạn cảm thấy thiếu thứ gì đó, vui lòng cho chúng tôi biết. Chúng ta hãy cùng nhau học hỏi và tận dụng tối đa kiến thức đó!