Sự khác biệt giữa cấu trúc và liên minh
NộI Dung
C ++ cho phép tất cả năm cách mà ngôn ngữ C cung cấp để tạo dữ liệu tùy chỉnh. Năm cách đó là ‘cấu trúc,‘ bit-lĩnh vực, ‘liên minh, um liệt kê,‘ typedef hành. Trong bài viết dưới đây, chúng tôi sẽ nghiên cứu sự khác biệt giữa cấu trúc và liên minh. Cả cấu trúc và liên kết đều là các kiểu dữ liệu chứa có thể chứa dữ liệu của bất kỳ loại Kiểu nào. Một điểm khác biệt chính giúp phân biệt cấu trúc và liên kết là cấu trúc có một vị trí bộ nhớ riêng cho từng thành viên trong khi đó, các thành viên của liên minh có chung một vị trí bộ nhớ.
Hãy để L Hiểu sự khác biệt giữa cấu trúc và liên minh, cùng với một biểu đồ so sánh.
- Biểu đồ so sánh
- Định nghĩa
- Sự khác biệt chính
- Điểm tương đồng
- Phần kết luận
Biểu đồ so sánh
Cơ sở so sánh | Kết cấu | liên hiệp |
---|---|---|
Căn bản | Vị trí bộ nhớ riêng được phân bổ cho từng thành viên của cấu trúc. | Tất cả các thành viên của liên minh chia sẻ cùng một vị trí bộ nhớ. |
Tờ khai | struct struct_name { loại phần tử1; loại phần tử2; . . } biến1, biến2, ...; | liên minh u_name { loại phần tử1; loại phần tử2; . . } biến1, biến2, ...; |
từ khóa | cấu trúc | liên hiệp |
Kích thước | Kích thước của cấu trúc = tổng kích thước của tất cả các thành viên dữ liệu. | Kích thước của Liên minh = kích thước của các thành viên lớn nhất. |
Giá trị cửa hàng | Lưu trữ các giá trị riêng biệt cho tất cả các thành viên. | Lưu trữ cùng một giá trị cho tất cả các thành viên. |
Tại một thời điểm | Một cấu trúc lưu trữ nhiều giá trị, của các thành viên khác nhau, của cấu trúc. | Một liên minh lưu trữ một giá trị tại một thời điểm cho tất cả các thành viên. |
Cách xem | Cung cấp cách duy nhất để xem từng vị trí bộ nhớ. | Cung cấp nhiều cách để xem cùng một vị trí bộ nhớ. |
Tính năng ẩn danh | Không có tính năng ẩn danh. | Liên minh ẩn danh có thể được tuyên bố. |
Định nghĩa cấu trúc
Cấu trúc là một tập hợp các biến có kiểu dữ liệu khác nhau, được gọi bằng một tên chung. Các biến trong một cấu trúc được gọi là các thành viên của Google. Theo mặc định, tất cả các thành viên của một cấu trúc là công cộng. Khi bạn khai báo một cấu trúc, bạn tạo một mẫu, có thể được sử dụng để tạo các đối tượng cấu trúc, chia sẻ cùng một tổ chức của các thành viên dữ liệu và các hàm thành viên. Việc khai báo cấu trúc luôn được đi trước bởi từ khóa cấu trúc cơ bản, nó cho trình biên dịch biết rằng một cấu trúc đã được khai báo. Hãy để một ví dụ.
Hãy để một ví dụ.
struct staff {tên chuỗi; chuỗi company_name; chuỗi thành phố; } emp1, emp2;
Ở đây, chúng tôi tuyên bố một cấu trúc để lưu trữ thông tin của nhân viên. Tuyên bố được chấm dứt bởi một dấu chấm phẩy, vì khai báo cấu trúc là một câu lệnh và, trong C ++, câu lệnh được chấm dứt bởi một dấu chấm phẩy.
Tên được đặt cho một cấu trúc xác định một loại hình loại (trong ví dụ trên, tên của cấu trúc đó là nhân viên của Google). Các biến của các loại này có thể được tạo ra, như trên, chúng tôi đã tạo ra hai biến số emp emp ′ và emp emp2 ′ của loại nhân viên. Trong ví dụ trên, chúng tôi đã tạo ra một biến cấu trúc ’cấu trúc ngay sau khi khai báo; luân phiên, nó có thể được tạo riêng.
cấu trúc nhân viên emp1, emp2; // cấu trúc từ khóa không bắt buộc.
Các thành viên của một biến cấu trúc có thể được khởi tạo hoặc có thể được truy cập bằng cách sử dụng toán tử dot (.).
emp1.name = "ashok";
Thông tin chứa trong một biến cấu trúc có thể được gán cho biến cấu trúc khác cùng loại như sau.
emp1.name = "ashok"; emp1.company_name = "Teckpix"; emp1.city = "Delhi"; emp2 = emp1; // gán giá trị của thành viên emp1 cho emp2. cout <
Ở đây, chúng tôi đã gán biến cấu trúc là emp emp1 ′ cho đến emp emp2 ′, vì vậy, emp emp1 ′ sao chép tất cả giá trị của các thành viên của nó cho thành viên tương ứng của ‘epm2.
Thành viên của biến cấu trúc có thể được truyền cho hàm.
func (emp1.city);
Toàn bộ biến cấu trúc có thể được truyền cho hàm, bằng cả hai phương thức gọi theo giá trị và gọi theo tham chiếu.
funt (emp1); // gọi hàm theo phương thức giá trị. . . void func (struct staff emp) {// nhận các giá trị của các thành viên của emp1. cout <
Ở đây, sự thay đổi giá trị của một thành viên của biến cấu trúc sẽ không phản ánh bên ngoài hàm khi một biến được truyền bằng cách gọi bằng phương thức giá trị. Bây giờ hãy để Lừa làm điều tương tự bằng cách gọi bằng phương pháp tham chiếu.
funt (& emp1); // gọi hàm bằng cách gọi theo phương thức tham chiếu. . . void func (struct staff * emp) {// địa chỉ nhận của emp1. emp-> city = "Nur"; // thay đổi giá trị của thành viên (thành phố) của biến cấu trúc emp1. . }
Ở đây, biến cấu trúc được truyền bằng tham chiếu vì vậy, thay đổi giá trị của các thành viên của biến cấu trúc cũng phản ánh bên ngoài hàm.
nhân viên srtuct * emp; // dán decal con trỏ cấu trúc của loại nhân viên. emp = & emp1; // gán địa chỉ của emp1 cho con trỏ. emp-> city // con trỏ truy cập vào thành phố của emp1.
Con trỏ đến cấu trúc cũng có thể được tạo ra; nó giữ địa chỉ của biến cấu trúc.
Trong cấu trúc, việc khởi tạo tổng hợp được cho phép khi định nghĩa cấu trúc không chứa, bất kỳ hàm tạo nào do người dùng định nghĩa hoặc các hàm ảo hoặc lớp cơ sở hoặc trường riêng hoặc được bảo vệ.
int main () {struct epm3 = {"Anil", "Teckpix", "Nur"}; } // Có thể là cấu trúc của nhân viên không chứa bất kỳ điều nào được đề cập ở trên.
Định nghĩa của Liên minh
Liên minh là một vị trí bộ nhớ được chia sẻ bởi hai hoặc nhiều loại biến khác nhau được khai báo dưới một loại kết hợp duy nhất. Từ khóa được sử dụng để tuyên bố một liên minh là Liên minh huyền thoại. Trong C ++, một liên minh có thể chứa cả hàm thành viên và biến. Theo mặc định, tất cả các thành viên của liên minh đều là công cộng. Tuyên bố của tổ chức liên kết thành công, tương tự như tuyên bố của cấu trúc.
liên minh u_type {int x, char c; phao f; } u1, u2;
Ở đây, chúng tôi đã tuyên bố một liên minh tên là u_type. Các thành viên của u_type là ‘x, loại số nguyên,’ c, loại nhân vật và ‘f F của loại hình nổi. Chúng tôi cũng đã tạo ra các biến liên kết ‘u1 và và 2 u2, thuộc loại‘ u_type, ngay sau khi tuyên bố về một liên minh. Chúng ta cũng có thể khai báo biến công đoàn tách biệt với khai báo của liên minh.
int main () {union u_type u1, u2; // Liên minh từ khóa không bắt buộc trong C ++. }
Việc truy cập của các thành viên của liên minh có thể được thực hiện bằng cách sử dụng toán tử dot (.), Trước biến liên kết và theo sau thành viên của biến đó.
u1.x = 10;
Giống như các cấu trúc, việc khởi tạo tổng hợp là không thể trong một liên minh. Như chúng ta biết, liên minh chia sẻ cùng một vị trí bộ nhớ cho tất cả các thành viên của nó tại một thời điểm chỉ có một biến được khởi tạo và tất cả các biến được tự động cập nhật với giá trị khởi tạo.
u1.x = 10; cout <
Nếu bạn cố gắng thay đổi giá trị của bất kỳ thành viên nào trong ’u1. Các thành viên khác sẽ được tự động cập nhật vào giá trị đó.
u1.c = 65; cout <
Không gian được phân bổ cho công đoàn có kích thước bằng với thành viên lớn nhất của công đoàn. Vì byte được phân bổ cho ‘char, là 1 byte,‘ int, là 4 byte và ‘float, là 4 byte, nên kích thước lớn nhất là 4 byte. Vì vậy, bộ nhớ được phân bổ cho 1 u1 và và 2 u2 là 4 byte.
int main () {int size_1 = sizeof (u1); // 4 int size_2 = sizeof (u2); //4
Con trỏ tới liên minh có thể được tạo giống như trong cấu trúc. Con trỏ giữ địa chỉ của liên minh.
liên minh u_type * un; un = & u1; cout < Giống như cấu trúc, liên kết cũng có thể được truyền cho các hàm bằng cả hai phương thức, tức là gọi theo giá trị và gọi theo tham chiếu. func (u1); // gọi hàm theo phương thức giá trị. . . void func (union u_type un) {// lấy giá trị của thành viên u1. cout < Bây giờ, hãy để hàm gọi hàm bằng cách gọi theo phương thức tham chiếu. dấu chấm (& u1); // gọi hàm bằng phương thức gọi lại. . . void func (union u_type un) {// lấy địa chỉ của u1. un-> x = 20. } Có một loại liên minh đặc biệt trong C ++ được gọi là Liên minh ẩn danh. Liên minh ẩn danh không thể có tên loại và, không có biến nào của liên kết đó có thể được tạo. Nó chỉ cho trình biên dịch biết rằng các biến thành viên của nó là để chia sẻ cùng một vị trí. Biến của một liên kết ẩn danh có thể được gọi mà không có toán tử dấu chấm (.) Bình thường. int main () {union {// xác định kết hợp ẩn danh với tên loại. int x, char c; phao f; }; x = 10; // đã giới thiệu biến union bằng cout toán tử out out < Trong liên minh ẩn danh, không có chức năng thành viên nào được phép, nó không thể chứa dữ liệu riêng tư hoặc được bảo vệ và liên minh ẩn danh toàn cầu phải được chỉ định là ‘tĩnh tĩnh. Những điểm cần nhớ cho tuyên bố công đoàn bình thường. Cả hai, cấu trúc và liên kết là kiểu dữ liệu chứa có chứa các thành viên của các loại khác nhau. Nhưng cấu trúc được sử dụng khi chúng ta cần lưu trữ giá trị riêng biệt cho tất cả các thành viên trong một vị trí bộ nhớ riêng biệt. Các công đoàn được sử dụng khi cần chuyển đổi loại.
Điểm tương đồng:
Phần kết luận: