Ví dụ về Liên minh C++

Vi Du Ve Lien Minh C



Hợp nhất là một loại lớp đặc biệt trong C++ cho phép lưu trữ các loại dữ liệu khác nhau trong một vị trí bộ nhớ dùng chung. Không giống như các cấu trúc, trong đó mỗi phần thường nhận được bộ nhớ, các hợp nhất cho phép các phần dữ liệu khác nhau sử dụng cùng một vị trí bộ nhớ. Đặc điểm này làm cho các kết hợp đặc biệt hữu ích khi hiệu quả bộ nhớ là ưu tiên hàng đầu và mỗi lần chỉ cần truy cập một trong các thành viên. Trong bài viết này, chúng ta sẽ đi sâu vào khái niệm về hợp trong C++ và khám phá nhiều ví dụ chứng minh tính hữu ích của chúng trong các tình huống khác nhau.

Cú pháp:

Liên kết là một loại do người dùng xác định, cho phép lưu trữ các loại dữ liệu đa dạng trong một vị trí bộ nhớ dùng chung. Việc sử dụng liên kết tuân theo cú pháp giống hệt với cấu trúc.







Cú pháp cơ bản như sau:



liên hiệp Tên công đoàn {

// Khai báo thành viên

DataType1 thành viên1 ;

Thành viên DataType22 ;

//...

} ;

Ở đây, “UnionName” đóng vai trò là mã định danh cho liên minh cung cấp một tên duy nhất để tham chiếu loại cụ thể do người dùng xác định này. Các kiểu dữ liệu của các thành viên liên minh được ký hiệu là “DataType1”, “DataType2”, v.v. Những kiểu dữ liệu này biểu thị các loại thông tin khác nhau có thể được lưu trữ trong liên minh. Mỗi thành viên trong liên minh, được chỉ định bằng các tên như “thành viên1”, “thành viên2”, v.v., đại diện cho một phần dữ liệu riêng biệt.



Bây giờ chúng ta đã hiểu cú pháp cơ bản. Bây giờ chúng ta hãy sử dụng một vài trường hợp để hiểu rõ hơn về điều này.





Ví dụ 1: Cách sử dụng Liên minh cơ bản

Ví dụ đầu tiên minh họa cách sử dụng cơ bản của các hợp nhất trong C++, trình bày cách chúng cho phép chia sẻ không gian bộ nhớ giữa các loại dữ liệu khác nhau trong một cấu trúc.

Đây là một ví dụ:



#include

sử dụng không gian tên std ;

liên hiệp MảngLiên minh {

int intArray [ 5 ] ;

trôi nổi floatArray [ 5 ] ;

} ;

int chủ yếu ( ) {

ArrayUnion mảngUnion ;

( int Tôi = 0 ; Tôi < 5 ; ++ Tôi ) {

mảngUnion. intArray [ Tôi ] = Tôi * 2 ;

}

cout << 'Mảng Int:' ;

( int Tôi = 0 ; Tôi < 5 ; ++ Tôi ) {

cout << ' ' << mảngUnion. intArray [ Tôi ] ;

}

cout << kết thúc ;

( int Tôi = 0 ; Tôi < 5 ; ++ Tôi ) {

mảngUnion. floatArray [ Tôi ] = Tôi * 1,5f ;

}

cout << 'Mảng nổi:' ;

( int Tôi = 0 ; Tôi < 5 ; ++ Tôi ) {

cout << ' ' << mảngUnion. floatArray [ Tôi ] ;

}

cout << kết thúc ;

trở lại 0 ;

}

Trong đoạn mã C++ này, chúng tôi sử dụng một liên kết có tên “MyUnion” kết hợp ba thành viên dữ liệu khác nhau: một số nguyên (intValue), một số dấu phẩy động (floatValue) và một ký tự (charValue). Chỉ một trong số các thành viên này có thể hoạt động tại bất kỳ thời điểm nào do khả năng chia sẻ không gian bộ nhớ của liên minh.

Trong hàm “main”, chúng ta khai báo một instance của union là “myUnion”. Đầu tiên, chúng ta đặt giá trị của thành viên số nguyên là 42 và sử dụng “cout” để in nó. Sau đó, chúng tôi gán giá trị dấu phẩy động là 3,14 cho thành viên “floatValue” và in nó. Cuối cùng, chúng ta gán ký tự “A” cho thành phần “charValue” và in nó. Điều cần thiết là phải nhớ rằng vì tất cả các thành viên công đoàn đều có chung một vị trí bộ nhớ nên việc thay đổi một thành viên có thể có tác động đến giá trị của các thành viên khác. Mã kết thúc bằng cách trả về 0, biểu thị việc thực thi thành công.

Ví dụ 2: Liên kết với Struct

Cấu trúc là một loại dữ liệu trong C++ mà người dùng có thể tạo để kết hợp các biến thuộc nhiều loại khác nhau dưới một tên thống nhất. Việc kết hợp một liên kết với một cấu trúc có thể hữu ích khi chúng ta muốn tạo một cấu trúc dữ liệu có thể chứa các loại dữ liệu khác nhau và mỗi loại được liên kết với một trường cụ thể. Việc ghép nối này cho phép phát triển các cấu trúc dữ liệu phức tạp có các cách biểu diễn đa dạng.

Đây là một ví dụ về việc sử dụng hợp trong một cấu trúc trong C++:

#include

sử dụng không gian tên std ;

cấu trúc Điểm {

int s1 ;

int s2 ;

} ;

liên hiệp Hình dạng {

int bên ;

trôi nổi bán kính ;

Điểm trung tâm ;

} ;

int chủ yếu ( ) {

hình dạng hình dạng ;

hình dạng. bên = 5 ;
cout << 'Các bên:' << hình dạng. bên << kết thúc ;

hình dạng. bán kính = 6.0f ;
cout << 'Bán kính:' << hình dạng. bán kính << kết thúc ;

hình dạng. trung tâm = { 10 , hai mươi } ;
cout << 'Trung tâm: (' << hình dạng. trung tâm . s1 << ',' << hình dạng. trung tâm . s2 << ')' << kết thúc ;

trở lại 0 ;

}

Trong mã này, chúng ta định nghĩa một chương trình C++ sử dụng phép hợp và cấu trúc để biểu diễn các khía cạnh khác nhau của một hình dạng hình học. Đầu tiên, chúng ta khai báo cấu trúc “Điểm” bao gồm hai thành phần số nguyên “s1” và “s2”, biểu thị tọa độ của một điểm trong không gian 2D. Sau đó, chúng ta định nghĩa một “union” có tên là “Shape” bao gồm ba thành phần: một số nguyên “cạnh”, một dấu phẩy động “bán kính” và một cấu trúc “Điểm” có tên là “trung tâm”. Chuyển sang chức năng “chính”, chúng ta khởi tạo một đối tượng “Hình dạng” có tên là “hình dạng”. Sau đó, chúng tôi chứng minh tính linh hoạt của liên minh bằng cách gán các giá trị cho các thành viên khác nhau của nó. Ban đầu, chúng ta đặt số cạnh là 5 và in kết quả. Tiếp theo, chúng ta gán bán kính 6,0 cho hình dạng và xuất ra bán kính. Cuối cùng, chúng ta gán một điểm trung tâm có tọa độ (10, 20) cho hình và in tọa độ của tâm.

Ví dụ 3: Liên minh với Enum

Trong C++, các bảng liệt kê, thường được gọi là enum, phục vụ mục đích xác định một tập hợp các hằng số nguyên được đặt tên. Việc kết hợp các enum với các hợp nhất có thể hữu ích trong các tình huống mà chúng ta muốn biểu thị một biến có thể có nhiều kiểu khác nhau, mỗi kiểu được liên kết với một giá trị enum cụ thể.

Đây là một ví dụ:

#include

sử dụng không gian tên std ;

liệt kê Loại dữ liệu {

số nguyên ,

TRÔI NỔI ,

CHAR

} ;

liên hiệp Giá trị dữ liệu {

int intValue ;

trôi nổi giá trị float ;

ký tự giá trị char ;

} ;

cấu trúc Dữ liệu {

Kiểu dữ liệu ;

Giá trị DataValue ;

} ;

int chủ yếu ( )

{

Dữ liệu dữ liệu1 , dữ liệu2 , dữ liệu3 ;

dữ liệu1. kiểu = số nguyên ;
dữ liệu1. giá trị . intValue = 42 ;

dữ liệu2. kiểu = TRÔI NỔI ;
dữ liệu2. giá trị . giá trị float = 3,14f ;

dữ liệu3. kiểu = CHAR ;
dữ liệu3. giá trị . giá trị char = 'MỘT' ;

cout << 'Dữ liệu 1:' << dữ liệu1. giá trị . intValue << kết thúc ;
cout << 'Dữ liệu 2:' << dữ liệu2. giá trị . giá trị float << kết thúc ;
cout << 'Dữ liệu 3:' << dữ liệu3. giá trị . giá trị char << kết thúc ;

trở lại 0 ;

}

Trong ví dụ này, chúng tôi có một chương trình sử dụng enum, hợp nhất và cấu trúc để tạo cấu trúc dữ liệu linh hoạt có khả năng chứa các loại giá trị khác nhau. Enum “DataType” được định nghĩa để thể hiện ba loại dữ liệu cơ bản: INTEGER, FLOAT và CHAR. Enum tăng cường khả năng đọc và bảo trì mã bằng cách cung cấp một tập hợp các hằng số tích phân được đặt tên.

Sau đó, chúng ta tạo một liên minh có tên là “DataValue” với ba thành viên: “charValue” thuộc loại char, “floatValue” thuộc loại float và “intValue” thuộc loại int. Với một liên minh, các thành viên này chia sẻ một vị trí bộ nhớ chung cho phép liên kết có thể thay thế cho nhau các giá trị của các loại riêng biệt. Sau đó, cấu trúc “Data” được tạo bao gồm hai thành viên: một bộ liệt kê “DataType” có tên là “type” và một liên kết “DataValue” có tên là “value”. Cấu trúc này cho phép chúng ta liên kết một kiểu dữ liệu với giá trị tương ứng của nó, cung cấp một biểu diễn có cấu trúc.

Trong hàm “chính”, chúng ta khởi tạo ba phiên bản của cấu trúc “Dữ liệu”: “data1”, “data2” và “data3”. Chúng tôi gán giá trị cho các trường hợp này bằng cách chỉ định loại dữ liệu và đặt giá trị phù hợp trong liên kết. Ví dụ: “data1” được gán với loại INTEGER có giá trị là 42. Cuối cùng, chúng tôi sử dụng câu lệnh “cout” để in các giá trị được lưu trữ trong mỗi phiên bản “Dữ liệu”. Chương trình xuất ra giá trị nguyên của “data1”, giá trị dấu phẩy động của “data2” và giá trị ký tự của “data3”.

Ví dụ này minh họa cách kết hợp các enum, hợp và cấu trúc có thể được sử dụng để tạo ra một cách biểu diễn dữ liệu linh hoạt và an toàn kiểu trong C++.

Phần kết luận

Các liên kết C++ cung cấp một cơ chế mạnh mẽ và linh hoạt để quản lý các kiểu dữ liệu đa dạng trong một không gian bộ nhớ. Các trường hợp được minh họa trong bài viết này nêu bật khả năng thích ứng và tính hiệu quả của công đoàn trong việc giải quyết một loạt các tình huống. Từ những cách sử dụng cơ bản thể hiện khả năng thay thế lẫn nhau của các kiểu dữ liệu cho đến các ứng dụng phức tạp hơn liên quan đến cấu trúc và enum, những ví dụ này nhấn mạnh tính hiệu quả và khả năng thích ứng mà sự kết hợp mang lại cho lập trình C++.