ไวยากรณ์:
ยูเนี่ยนคือประเภทที่ผู้ใช้กำหนด ทำให้สามารถจัดเก็บข้อมูลประเภทต่างๆ ภายในตำแหน่งหน่วยความจำที่ใช้ร่วมกันได้ การใช้สหภาพเป็นไปตามไวยากรณ์ที่เหมือนกับโครงสร้าง
ไวยากรณ์พื้นฐานมีดังนี้:
สหภาพแรงงาน ชื่อสหภาพ -
//ประกาศสมาชิก
สมาชิก DataType11 -
สมาชิก DataType22 -
-
- -
ในที่นี้ “UnionName” ทำหน้าที่เป็นตัวระบุสำหรับสหภาพซึ่งให้ชื่อเฉพาะเพื่ออ้างอิงถึงประเภทที่ผู้ใช้กำหนดโดยเฉพาะ ประเภทข้อมูลของสมาชิกสหภาพจะแสดงเป็น 'DataType1', 'DataType2' และอื่นๆ ประเภทข้อมูลเหล่านี้บ่งบอกถึงข้อมูลประเภทต่างๆ ที่สามารถจัดเก็บภายในสหภาพได้ สมาชิกแต่ละรายภายในสหภาพ ซึ่งกำหนดด้วยชื่อ เช่น 'member1', 'member2' ฯลฯ แสดงถึงชิ้นส่วนข้อมูลที่แตกต่างกัน
ตอนนี้เราเข้าใจไวยากรณ์พื้นฐานแล้ว ตอนนี้เรามาดูตัวอย่างบางส่วนเพื่อทำความเข้าใจเรื่องนี้กันดีกว่า
ตัวอย่างที่ 1: การใช้สหภาพขั้นพื้นฐาน
ตัวอย่างแรกแสดงให้เห็นถึงการใช้งานพื้นฐานของสหภาพใน C ++ โดยแสดงให้เห็นว่าพวกเขาเปิดใช้งานการแบ่งปันพื้นที่หน่วยความจำระหว่างประเภทข้อมูลที่แตกต่างกันภายในโครงสร้างเดียวได้อย่างไร
นี่คือตัวอย่าง:
#รวม
ใช้เนมสเปซมาตรฐาน -
สหภาพแรงงาน อาร์เรย์ยูเนี่ยน -
ภายใน intArray - 5 - -
ลอย floatArray - 5 - -
- -
ภายใน หลัก - - -
ArrayUnion อาเรย์ยูเนี่ยน -
สำหรับ - ภายใน ฉัน - 0 - ฉัน - 5 - - ฉัน - -
อาร์เรย์ยูเนี่ยน intArray - ฉัน - - ฉัน - 2 -
-
ศาล - 'อาร์เรย์ภายใน:' -
สำหรับ - ภายใน ฉัน - 0 - ฉัน - 5 - - ฉัน - -
ศาล - - - อาร์เรย์ยูเนี่ยน intArray - ฉัน - -
-
ศาล - สิ้นสุด -
สำหรับ - ภายใน ฉัน - 0 - ฉัน - 5 - - ฉัน - -
อาร์เรย์ยูเนี่ยน floatArray - ฉัน - - ฉัน - 1.5ฟ -
-
ศาล - 'อาร์เรย์โฟลต:' -
สำหรับ - ภายใน ฉัน - 0 - ฉัน - 5 - - ฉัน - -
ศาล - - - อาร์เรย์ยูเนี่ยน floatArray - ฉัน - -
-
ศาล - สิ้นสุด -
กลับ 0 -
-
ในตัวอย่างโค้ด C++ นี้ เราใช้การรวมชื่อ 'MyUnion' ซึ่งรวมสมาชิกข้อมูลที่แตกต่างกันสามรายการ: จำนวนเต็ม (intValue) ตัวเลขทศนิยม (floatValue) และอักขระ (charValue) สมาชิกเหล่านี้เพียงคนเดียวเท่านั้นที่สามารถใช้งานได้ ณ จุดใดก็ตาม เนื่องจากความสามารถของสหภาพในการแบ่งปันพื้นที่ความทรงจำ
ภายในฟังก์ชัน 'main' เราประกาศอินสแตนซ์ของสหภาพซึ่งก็คือ 'myUnion' ขั้นแรก เราตั้งค่าของสมาชิกจำนวนเต็มเป็น 42 และใช้ 'cout' เพื่อพิมพ์ ต่อมาเรากำหนดค่าจุดลอยตัวที่ 3.14 ให้กับสมาชิก “floatValue” แล้วพิมพ์ออกมา สุดท้ายนี้ เรากำหนดอักขระ 'A' ให้กับสมาชิก 'charValue' แล้วพิมพ์ออกมา สิ่งสำคัญคือต้องจำไว้ว่าเนื่องจากสมาชิกสหภาพแรงงานทุกคนมีความทรงจำที่เดียวกัน การเปลี่ยนแปลงสมาชิกคนหนึ่งอาจมีผลกระทบต่อค่านิยมของสมาชิกคนอื่นๆ รหัสสรุปด้วยการส่งคืน 0 ซึ่งหมายถึงการดำเนินการที่ประสบความสำเร็จ
ตัวอย่างที่ 2: ยูเนี่ยนกับโครงสร้าง
โครงสร้างคือประเภทของข้อมูลในภาษา C++ ที่ผู้ใช้สามารถสร้างขึ้นเพื่อรวมตัวแปรประเภทต่างๆ ไว้ภายใต้ชื่อเดียว การรวมการรวมเข้ากับโครงสร้างจะมีประโยชน์เมื่อเราต้องการสร้างโครงสร้างข้อมูลที่สามารถเก็บข้อมูลประเภทต่างๆ และแต่ละประเภทเชื่อมโยงกับฟิลด์เฉพาะ การจับคู่นี้ทำให้เกิดการพัฒนาโครงสร้างข้อมูลที่ซับซ้อนซึ่งมีการนำเสนอที่หลากหลาย
นี่คือตัวอย่างของการใช้สหภาพภายในโครงสร้างใน C ++:
#รวมใช้เนมสเปซมาตรฐาน -
โครงสร้าง จุด -
ภายใน s1 -
ภายใน s2 -
- -
สหภาพแรงงาน รูปร่าง -
ภายใน ด้านข้าง -
ลอย รัศมี -
จุดศูนย์กลาง -
- -
ภายใน หลัก - - -
รูปร่างรูปทรง -
รูปร่าง. ด้านข้าง - 5 -
ศาล - 'ด้านข้าง:' - รูปร่าง. ด้านข้าง - สิ้นสุด -
รูปร่าง. รัศมี - 6.0ฟ -
ศาล - 'รัศมี:' - รูปร่าง. รัศมี - สิ้นสุด -
รูปร่าง. ศูนย์ - - 10 - ยี่สิบ - -
ศาล - 'ศูนย์: (' - รูปร่าง. ศูนย์ - s1 - - - รูปร่าง. ศูนย์ - s2 - - - สิ้นสุด -
กลับ 0 -
-
ในโค้ดนี้ เรากำหนดโปรแกรม C++ ที่ใช้สหภาพและโครงสร้างเพื่อแสดงแง่มุมต่างๆ ของรูปทรงเรขาคณิต ขั้นแรก เราประกาศโครงสร้าง 'จุด' ซึ่งประกอบด้วยสมาชิกจำนวนเต็มสองตัว 's1' และ 's2' ซึ่งแสดงถึงพิกัดของจุดในปริภูมิ 2 มิติ จากนั้นเรากำหนด 'สหภาพ' ชื่อ 'รูปร่าง' ซึ่งประกอบด้วยสมาชิกสามคน: จำนวนเต็ม 'ด้าน' จุดลอยตัว 'รัศมี' และโครงสร้าง 'จุด' ชื่อ 'ศูนย์กลาง' ไปที่ฟังก์ชัน 'หลัก' เราจะสร้างอินสแตนซ์ของวัตถุ 'รูปร่าง' ชื่อ 'รูปร่าง' จากนั้นเราจะแสดงให้เห็นถึงความเก่งกาจของสหภาพโดยการกำหนดค่าให้กับสมาชิกที่แตกต่างกัน ขั้นแรกเรากำหนดจำนวนด้านเป็น 5 และพิมพ์ผลลัพธ์ ต่อไป เราจะกำหนดรัศมี 6.0 ให้กับรูปร่างและส่งออกรัศมี สุดท้ายนี้ เรากำหนดจุดกึ่งกลางด้วยพิกัด (10, 20) ให้กับรูปร่างและพิมพ์พิกัดของจุดศูนย์กลาง
ตัวอย่างที่ 3: ยูเนี่ยนกับ Enum
ในภาษา C++ การแจงนับ หรือที่เรียกกันทั่วไปว่าแจงนับ มีจุดประสงค์ในการกำหนดค่าของค่าคงที่อินทิกรัลที่มีชื่อ การรวมแจงนับกับสหภาพอาจมีประโยชน์ในสถานการณ์ที่เราต้องการแสดงตัวแปรที่สามารถรับประเภทที่แตกต่างกัน โดยแต่ละรายการเชื่อมโยงกับค่าแจงนับเฉพาะ
นี่คือตัวอย่าง:
#รวมใช้เนมสเปซมาตรฐาน -
แจกแจง ประเภทข้อมูล -
จำนวนเต็ม -
ลอย -
ถ่าน
- -
สหภาพแรงงาน ค่าข้อมูล -
ภายใน intValue -
ลอย floatValue -
ถ่าน ถ่านค่า -
- -
โครงสร้าง ข้อมูล -
ชนิดข้อมูล -
ค่า DataValue -
- -
ภายใน หลัก - -
-
ข้อมูลข้อมูล1 - ข้อมูล2 - ข้อมูล3 -
ข้อมูล1. พิมพ์ - จำนวนเต็ม -
ข้อมูล1. ค่า - intValue - 42 -
ข้อมูล2. พิมพ์ - ลอย -
ข้อมูล2. ค่า - floatValue - 3.14ฟ -
ข้อมูล3. พิมพ์ - ถ่าน -
ข้อมูล3. ค่า - ถ่านค่า - 'เอ' -
ศาล - 'ข้อมูล 1:' - ข้อมูล1. ค่า - intValue - สิ้นสุด -
ศาล - 'ข้อมูล 2:' - ข้อมูล2. ค่า - floatValue - สิ้นสุด -
ศาล - 'ข้อมูล 3:' - ข้อมูล3. ค่า - ถ่านค่า - สิ้นสุด -
กลับ 0 -
-
สำหรับตัวอย่างนี้ เรามีโปรแกรมที่ใช้การแจกแจง สหภาพ และโครงสร้างเพื่อสร้างโครงสร้างข้อมูลที่ยืดหยุ่นซึ่งสามารถเก็บค่าประเภทต่างๆ ได้ enum “DataType” ถูกกำหนดให้เป็นตัวแทนของประเภทข้อมูลพื้นฐานสามประเภท: INTEGER, FLOAT และ CHAR enum ช่วยเพิ่มความสามารถในการอ่านและการบำรุงรักษาโค้ดโดยเสนอชุดของค่าคงที่อินทิกรัลที่มีชื่อ
จากนั้น เราสร้างสหภาพที่เรียกว่า 'DataValue' โดยมีสมาชิกสามคน: 'charValue' ของประเภท char 'floatValue' ของประเภท float และ 'intValue' ของประเภท int เมื่อมีสหภาพ สมาชิกเหล่านี้จะแบ่งปันตำแหน่งหน่วยความจำร่วมกันซึ่งช่วยให้สหภาพสามารถรองรับค่าของประเภทที่แตกต่างกันสลับกันได้ โครงสร้าง 'ข้อมูล' จะถูกสร้างขึ้นซึ่งประกอบด้วยสมาชิกสองคน: ตัวแจงนับ 'DataType' ชื่อ 'type' และสหภาพ 'DataValue' ชื่อ 'value' โครงสร้างนี้ช่วยให้เราสามารถเชื่อมโยงประเภทข้อมูลกับค่าที่สอดคล้องกัน โดยให้การแสดงที่มีโครงสร้าง
ในฟังก์ชัน 'main' เราจะสร้างตัวอย่างสามอินสแตนซ์ของโครงสร้าง 'Data': 'data1', 'data2' และ 'data3' เรากำหนดค่าให้กับอินสแตนซ์เหล่านี้โดยการระบุประเภทข้อมูลและตั้งค่าที่เหมาะสมภายในการรวม ตัวอย่างเช่น “data1” ถูกกำหนดด้วยประเภท INTEGER ที่มีค่า 42 สุดท้ายนี้ เราใช้คำสั่ง “cout” เพื่อพิมพ์ค่าที่จัดเก็บไว้ในอินสแตนซ์ “Data” แต่ละรายการ โปรแกรมส่งออกค่าจำนวนเต็มของ “data1” ค่าจุดลอยตัวของ “data2” และค่าอักขระของ “data3”
ตัวอย่างนี้แสดงให้เห็นว่าการรวมแจงนับ สหภาพ และโครงสร้างสามารถนำมาใช้เพื่อสร้างการแสดงข้อมูลที่หลากหลายและปลอดภัยใน C++ ได้อย่างไร
บทสรุป
การรวม C++ มอบกลไกที่ทรงพลังและยืดหยุ่นสำหรับการจัดการประเภทข้อมูลที่หลากหลายภายในพื้นที่หน่วยความจำเดียว ตัวอย่างที่อธิบายไว้ในบทความนี้เน้นย้ำถึงความสามารถในการปรับตัวและประสิทธิผลของสหภาพแรงงานในการจัดการกับสถานการณ์ต่างๆ จากการใช้งานพื้นฐานที่แสดงให้เห็นถึงความสามารถในการสับเปลี่ยนชนิดข้อมูลไปจนถึงแอปพลิเคชันที่ซับซ้อนมากขึ้นที่เกี่ยวข้องกับโครงสร้างและการแจงนับ ตัวอย่างเหล่านี้เน้นย้ำถึงประสิทธิภาพและความสามารถในการปรับตัวที่สหภาพแรงงานนำมาสู่การเขียนโปรแกรม C++