hợp nhất trong C++ với các ví dụ
Trong trang này, chúng tôi sẽ thảo luận về hai chủ đề sau:
Liên minh C++
Các công đoàn giống như loại cấu trúc, có nghĩa là một tập hợp các kiểu dữ liệu tương tự và khác nhau.
Nhưng trong trường hợp vị trí bộ nhớ của các thành viên của cấu trúc là khác nhau đối với mỗi thành viên, liên minh dành cùng một vị trí trong bộ nhớ cho tất cả các thành viên dữ liệu của nó, do đó chúng ảnh hưởng lẫn nhau,
Bạn có thể hiểu điều này theo cách mà khi bạn nhập giá trị thứ hai sau khi nhập giá trị đầu tiên, giá trị thứ hai sẽ xóa giá trị đầu tiên, theo cách này, chỉ lưu trữ giá trị được nhập cuối cùng và khi chúng tôi in các giá trị này, thay vì xóa các giá trị, chúng tôi nhận được các giá trị rác, đó chỉ là giá trị được nhập cuối cùng trong bản in.
Chúng ta sẽ thảo luận ở đây
Trong sơ đồ bên dưới, bạn có thể thấy rằng liên minh dành cùng một vị trí trong bộ nhớ cho các thành viên dữ liệu của nó, nghĩa là địa chỉ bộ nhớ của tất cả các thành viên là như nhau.
Do các thành viên công đoàn được đặt trước trong cùng một địa chỉ bộ nhớ, các giá trị lưu trữ này ảnh hưởng lẫn nhau, do đó người dùng nhận được các giá trị rác.
Tuyên bố của đoàn viên công đoàn trong C++
Tuyên bố về cấu trúc và liên minh là như nhau. Bạn có thể hiểu nó với cú pháp được đưa ra dưới đây-
union union-name {
data member1;
data member2;
data member n;
};
Trong đó một liên minh là một mã định danh, là tùy chọn và thành viên dữ liệu là một kiểu dữ liệu (int, char, float) ví dụ
union book {
int sr;
char name[10];
float price;
};
truy cập của thành viên công đoàn trong C ++
Là thành viên của công đoàn, chúng tôi truy cập toán tử dot dưới dạng cấu trúc với biến union.
Đây là cú pháp, để truy cập thành viên công đoàn
union_name.member_name;
Hãy hiểu điều này, với sự giúp đỡ của một ví dụ ở đây
Ví dụ
union book {
int sr;
char name[10];
float price;
}vr;
Bây giờ, việc truy cập các thành viên dữ liệu này của một công đoàn sẽ như sau,
vr.sr;
vr.name;
vr.price;
Chương trình của nó được đưa ra dưới đây-
Ví dụ về hợp nhất trong C++
#include<iostream>
using namespace std;
union book{
int sr;
char name[20];
float price;
};
int main()
{
book vr;
cout<<"Enter Serial No.: ";
cin>>vr.sr;
cout<<"Enter Book Name : ";
gets(vr.name);
cout<<"Enter Book Price: ";
cin>>vr.price;
cout<<"\nSerial No.: "<<vr.sr; // garbage value will be print
cout<<"\nBook Name : "<<vr.name; // garbage value will be print
cout<<"\nBook Price: "<<vr.price; // accurate value be print
return 0;
}
RA
Serial No.: 101
Book Name : Science
Book Price: 350.5
Serial No.: 16384
Book Name :
Book Price: 350.5
Nếu muốn, chúng ta có thể truy cập vào thành viên công đoàn bằng toán tử mũi tên (->) giống như trong cấu trúc.
Tìm ra quy mô công đoàn trong C ++
Bởi vì vị trí bộ nhớ của tất cả các thành viên dữ liệu của liên minh là như nhau, do đó nó lấy không gian bộ nhớ của kích thước của thành viên dữ liệu đó, kích thước của thành viên dữ liệu lớn hơn thành viên khác.
union {
int no;
char name[20],
float price;
};
Trong đó, kích thước của thành viên, tên lớn hơn kích thước của các thành viên khác (sr, giá) nên kích thước của một liên minh trong bộ nhớ (char × 20 = 20 byte) sẽ là 20 byte.
Chúng ta có thể hiểu điều này với sự trợ giúp của chương trình được đưa ra dưới đây, trong đó chúng ta đã tìm thấy kích thước của biến union bằng cách sử dụng toán tử sizeof.
#include<iostream>
#include<stdio>
using namespace std;
union { // union declaration in global
int sr;
char name[20];
float price;
}vr;
int main()
{
cout<<"Size of union variable : "<<sizeof(vr)<<" byte";
return 0;
}
RA
Size of union variable : 20 byte
Tìm ra kích thước cấu trúc trong C ++
công đoàn ẩn danh trong C ++
Khi chúng ta định nghĩa một liên minh mà không có bất kỳ tên nào, nó được gọi là Liên minh ẩn danh. Trong đó, đoàn viên công đoàn được truy cập trực tiếp bằng tên của họ. Lưu ý rằng loại liên minh này được tuyên bố (cục bộ) trong chính nó.void main()
int main()
{
union {
........
........
}
........
}
Bạn có thể hiểu điều này với sự trợ giúp của chương trình được đưa ra dưới đây,
#include<iostream>
using namespace std;
int main()
{
union { //declare union in local
int sr;
char name[20];
float price;
};
cout<<"Serial No.: ";
cin>>sr;
cout<<"Book Name : ";
cin>>name;
cout<<"Book Price: ";
cin>>price;
cout<<"\nSerial No.: "<<sr; // garbage value print
cout<<"\nBook Name : "<<name; //garbage value print
cout<<"\nBook Price: "<<price; // accurate value print
return 0;
}
RA
Serial No.: 101
Book Name : Science
Book Price: 350.5
Serial No.: 16384
Book Name :
Book Price: 350.5
sự tương đồng giữa cấu trúc và hợp nhất trong C ++
- Cả hợp nhất và cấu trúc đều là kiểu dữ liệu do người dùng xác định.
- Cả tên hợp nhất và cấu trúc đều là định danh, tức là bất kỳ tên phù hợp nào (ngoại trừ từ khóa dành riêng).
- Giống như cấu trúc, các kiểu dữ liệu trong liên minh được khai báo trong khung ngoặc đơn. Chúng được gọi là thành viên và mỗi thành viên .kết thúc bằng dấu chấm phẩy.
- Các thành viên của cả cấu trúc và liên minh có thể thuộc cả kiểu dữ liệu và kiểu hàm.
- Các thành viên dữ liệu của cả hai, được truy cập bằng cách sử dụng các biến của chúng cùng với tên thành viên của chúng,
variable-name.member-name;
- Nhiều hơn một biến của cả hai có thể được khai báo.
structure-name.variable1, variable2, variable3;
union-name.variable1, variable2, variable3;
- Trong cả hai kiểu dữ liệu, không gian trong bộ nhớ chỉ được dành riêng sau khi biến được khai báo, nghĩa là trong quá trình khai báo thành viên, bộ nhớ không thể dự trữ.
- Chúng ta có thể khai báo cả hai loại dữ liệu là toàn cầu và cục bộ.
Sự khác biệt giữa hợp nhất và cấu trúc trong C ++
-
- Như chúng ta đã biết, trong cả hai, không gian bộ nhớ chỉ được dành riêng sau khi khai báo biến nhưng khi cấu trúc cung cấp một vị trí bộ nhớ khác nhau cho tất cả các thành viên của nó trong bộ nhớ, các thành viên liên minh được lưu trữ trong bộ nhớ ở cùng một vị trí. Đây là một sơ đồ.
-
- Trong hợp nhất, giá trị thứ hai loại bỏ giá trị đầu tiên, tức là giá trị được nhập vào giá trị cuối cùng được lưu trữ trong bộ nhớ, trong khi không có gì như thế này do vị trí bộ nhớ khác nhau trong cấu trúc.
- Cấu trúc dành không gian trong bộ nhớ cho các thành viên của nó theo loại dữ liệu của họ, trong khi liên minh lấy kích thước trong các thành viên dữ liệu của nó theo thành viên có kích thước lớn hơn các thành viên dữ liệu khác. Xem hai cái này
tìm ra kích thước cấu trúc trong C ++ tìm ra kích thước hợp nhất trong C ++
- Các thành viên dữ liệu của liên minh khai báo địa phương có thể được truy cập bằng tên thành viên trực tiếp (được gọi là liên minh ẩn danh) trong khi ở cấu trúc địa phương hoặc toàn cầu, chúng tôi truy cập các thành viên dữ liệu của nó với biến cấu trúc.