Sự khác biệt giữa cấu trúc và liên minh

Tác Giả: Laura McKinney
Ngày Sáng TạO: 1 Tháng Tư 2021
CậP NhậT Ngày Tháng: 5 Có Thể 2024
Anonim
Sự khác biệt giữa cấu trúc và liên minh - Công Nghệ
Sự khác biệt giữa cấu trúc và liên minh - Công Nghệ

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.

  1. Biểu đồ so sánh
  2. Định nghĩa
  3. Sự khác biệt chính
  4. Điểm tương đồng
  5. Phần kết luận

Biểu đồ so sánh

Cơ sở so sánhKết cấuliên hiệp
Căn bảnVị 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ờ khaistruct 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óacấu trúcliên hiệp
Kích thướcKí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àngLư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ểmMộ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 xemCung 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 danhKhô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 <x; // 10

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.

  • Định nghĩa của liên minh cũng có thể chứa hàm tạo và hàm hủy.
  • Liên minh cung cấp nhiều cách để xem cùng một vị trí bộ nhớ.
  • Liên minh không thể kế thừa lớp của bất kỳ loại nào.
  • Công đoàn không thể là một lớp cơ sở.
  • Liên minh không thể có chức năng thành viên ảo.
  • Liên minh không thể có một biến tĩnh.
  1. Cấu trúc sử dụng vị trí bộ nhớ khác nhau cho các thành viên khác nhau. Do đó, giá trị riêng biệt có thể được phân bổ cho tất cả các thành viên. Nhưng, công đoàn phân bổ cùng một vị trí bộ nhớ cho tất cả các thành viên. Do đó, một giá trị duy nhất có thể được phân bổ cho tất cả các thành viên.
  2. Cấu trúc có vị trí bộ nhớ khác nhau cho tất cả các thành viên; do đó, nó có thể chứa nhiều giá trị cùng một lúc và 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, do đó, nó có thể lưu trữ một giá trị tại một thời điểm.
  3. Nói chung, tổng kích thước của cấu trúc lớn hơn tổng kích thước của liên kết vì kích thước của cấu trúc là tổng kích thước của tất cả các thành viên của cấu trúc và kích thước của liên kết là kích thước của thành viên của loại lớn nhất.
  4. Cấu trúc cung cấp chế độ xem duy nhất của từng vị trí trong khi đó, liên minh cung cấp nhiều chế độ xem của một vị trí.
  5. Bạn có thể tuyên bố một liên minh ẩn danh nhưng không phải là một cấu trúc ẩn danh.

Điểm tương đồng:

  • Cả cấu trúc và liên kết đều có cùng một cách khai báo, tạo các biến và cùng cách truy cập các thành viên của các biến.
  • Cả Cấu trúc và liên kết có thể được truyền cho một hàm bằng cả hai phương thức gọi theo giá trị và gọi bằng tham chiếu.
  • Cả Cấu trúc và liên kết là loại dữ liệu chứa & chứa một đối tượng của bất kỳ loại dữ liệu nào, bao gồm cả cấu trúc, liên kết, mảng khác với tư cách là thành viên của chúng.

Phần kết luận:

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.