ตัวอย่างสหภาพ C ++

Tawxyang Shphaph C



ยูเนี่ยนเป็นประเภทคลาสพิเศษในภาษา C++ ที่ช่วยให้สามารถจัดเก็บข้อมูลประเภทต่างๆ ในตำแหน่งหน่วยความจำที่ใช้ร่วมกันได้ ต่างจากโครงสร้างที่แต่ละส่วนมักจะได้รับหน่วยความจำ สหภาพจะปล่อยให้ข้อมูลที่แตกต่างกันใช้ตำแหน่งหน่วยความจำเดียวกัน คุณลักษณะนี้ทำให้สหภาพมีประโยชน์อย่างยิ่งเมื่อประสิทธิภาพของหน่วยความจำเป็นสิ่งสำคัญ และต้องเข้าถึงสมาชิกเพียงรายเดียวในแต่ละครั้ง ในบทความนี้ เราจะเจาะลึกแนวคิดเรื่องสหภาพในภาษา C++ และสำรวจตัวอย่างต่างๆ มากมายที่แสดงให้เห็นถึงประโยชน์ใช้สอยในสถานการณ์ต่างๆ

ไวยากรณ์:

ยูเนี่ยนคือประเภทที่ผู้ใช้กำหนด ทำให้สามารถจัดเก็บข้อมูลประเภทต่างๆ ภายในตำแหน่งหน่วยความจำที่ใช้ร่วมกันได้ การใช้สหภาพเป็นไปตามไวยากรณ์ที่เหมือนกับโครงสร้าง







ไวยากรณ์พื้นฐานมีดังนี้:



สหภาพแรงงาน ชื่อสหภาพ -

//ประกาศสมาชิก

สมาชิก 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++