أمثلة على اتحاد C++

Amthlt Ly Athad C



الاتحاد هو نوع فئة خاص في لغة C++ يتيح تخزين أنواع مختلفة من البيانات في موقع ذاكرة مشترك. على عكس الهياكل، حيث يحصل كل جزء عادةً على ذاكرته، تسمح الاتحادات لأجزاء مختلفة من البيانات باستخدام نفس موقع الذاكرة. هذه الخاصية تجعل الاتحادات مفيدة بشكل خاص عندما تكون كفاءة الذاكرة أولوية، ويجب الوصول إلى عضو واحد فقط في المرة الواحدة. في هذه المقالة، سوف نتعمق في مفهوم النقابات في لغة C++ ونستكشف أمثلة متعددة توضح فائدتها في سيناريوهات مختلفة.

بناء الجملة:

الاتحاد هو نوع يتم تحديده من قبل المستخدم، مما يتيح تخزين أنواع البيانات المتنوعة داخل موقع الذاكرة المشتركة. يتبع استخدام الاتحاد بناء جملة مطابقًا للبنية.







بناء الجملة الأساسي هو كما يلي:



اتحاد اسم الاتحاد {

// تصريحات الأعضاء

نوع البيانات 1 عضو 1 ;

عضو DataType22 ;

//...

} ;

هنا، يعمل 'UnionName' كمعرف للاتحاد الذي يوفر اسمًا فريدًا للإشارة إلى هذا النوع المحدد المحدد من قبل المستخدم. يُشار إلى أنواع بيانات أعضاء الاتحاد باسم 'DataType1' و'DataType2' وما إلى ذلك. تشير أنواع البيانات هذه إلى الأنواع المتنوعة من المعلومات التي يمكن تخزينها داخل الاتحاد. يمثل كل عضو داخل الاتحاد، يتم تعيينه بأسماء مثل 'العضو 1' و'العضو 2' وما إلى ذلك، جزءًا مميزًا من البيانات.



نحن الآن نفهم بناء الجملة الأساسي. دعونا الآن نستخدم بعض الأمثلة لفهم ذلك بشكل أفضل.





مثال 1: الاستخدام الأساسي للاتحاد

يوضح المثال الأول الاستخدام الأساسي للاتحادات في C++، ويعرض كيفية تمكين مشاركة مساحة الذاكرة بين أنواع البيانات المختلفة داخل بنية واحدة.

هنا مثال:



#تشمل

استخدام اسم للمحطة ;

اتحاد ArrayUnion {

كثافة العمليات intArray [ 5 ] ;

يطفو floatArray [ 5 ] ;

} ;

كثافة العمليات رئيسي ( ) {

ArrayUnion arrayUnion ;

ل ( كثافة العمليات أنا = 0 ; أنا < 5 ; ++ أنا ) {

arrayUnion. intArray [ أنا ] = أنا * 2 ;

}

cout << 'صفيف كثافة العمليات:' ;

ل ( كثافة العمليات أنا = 0 ; أنا < 5 ; ++ أنا ) {

cout << ' ' << arrayUnion. intArray [ أنا ] ;

}

cout << endl ;

ل ( كثافة العمليات أنا = 0 ; أنا < 5 ; ++ أنا ) {

arrayUnion. floatArray [ أنا ] = أنا * 1.5f ;

}

cout << 'المصفوفة العائمة:' ;

ل ( كثافة العمليات أنا = 0 ; أنا < 5 ; ++ أنا ) {

cout << ' ' << arrayUnion. floatArray [ أنا ] ;

}

cout << endl ;

يعود 0 ;

}

في مقتطف كود C++ هذا، نستخدم اتحادًا يسمى 'MyUnion' يتضمن ثلاثة أعضاء مختلفين للبيانات: عدد صحيح (intValue)، ورقم الفاصلة العائمة (floatValue)، وحرف (charValue). قد يكون واحد فقط من هؤلاء الأعضاء نشطًا في أي وقت نظرًا لقدرة الاتحاد على مشاركة مساحة الذاكرة.

ضمن الوظيفة 'الرئيسية'، نعلن عن مثيل للاتحاد وهو 'myUnion'. أولاً، قمنا بتعيين قيمة العضو الصحيح على 42 واستخدمنا 'cout' لطباعته. بعد ذلك، نقوم بتعيين قيمة الفاصلة العائمة 3.14 للعضو 'floatValue' وطباعتها. وأخيرًا، نقوم بتعيين الحرف 'A' للعضو 'charValue' وطباعته. من الضروري أن نتذكر أنه بما أن جميع أعضاء النقابة يتشاركون نفس موقع الذاكرة، فإن تغيير عضو واحد قد يكون له تأثير على قيم الأعضاء الآخرين. ويختتم الكود بإرجاع 0 مما يدل على التنفيذ الناجح.

مثال 2: الاتحاد مع الهيكل

البنية هي نوع من البيانات في لغة C++ يمكن للمستخدمين إنشاؤها لدمج المتغيرات من أنواع مختلفة تحت اسم موحد واحد. يمكن أن يكون الجمع بين الاتحاد والبنية مفيدًا عندما نريد إنشاء بنية بيانات يمكنها الاحتفاظ بأنواع مختلفة من البيانات، ويرتبط كل نوع بحقل معين. يسمح هذا الاقتران بتطوير هياكل بيانات معقدة تتميز بتمثيلات متنوعة.

فيما يلي مثال لاستخدام اتحاد داخل بنية في C++:

#تشمل

استخدام اسم للمحطة ;

البنية نقطة {

كثافة العمليات S1 ;

كثافة العمليات s2 ;

} ;

اتحاد شكل {

كثافة العمليات الجانبين ;

يطفو نصف القطر ;

مركز النقطة ;

} ;

كثافة العمليات رئيسي ( ) {

شكل الشكل ;

شكل. الجانبين = 5 ;
cout << 'الجوانب:' << شكل. الجانبين << endl ;

شكل. نصف القطر = 6.0f ;
cout << 'نصف القطر: ' << شكل. نصف القطر << endl ;

شكل. مركز = { 10 , عشرين } ;
cout << 'مركز: (' << شكل. مركز . S1 << '،' << شكل. مركز . s2 << ')' << endl ;

يعود 0 ;

}

في هذا الكود، قمنا بتعريف برنامج C++ الذي يستخدم اتحادًا وبنية لتمثيل جوانب مختلفة من الشكل الهندسي. أولاً، نعلن عن بنية 'نقطة' تتكون من عضوين صحيحين، 's1' و's2'، اللذين يمثلان إحداثيات نقطة في فضاء ثنائي الأبعاد. بعد ذلك، قمنا بتعريف 'اتحاد' يسمى 'الشكل' والذي يتكون من ثلاثة أعضاء: عدد صحيح 'الجوانب'، ونقطة عائمة 'نصف القطر'، وبنية 'نقطة' تسمى 'المركز'. بالانتقال إلى الوظيفة 'الرئيسية'، نقوم بإنشاء كائن 'شكل' يسمى 'الشكل'. ثم نقوم بإظهار تنوع الاتحاد من خلال تعيين القيم لأعضائه المختلفين. في البداية، نضبط عدد الجوانب على 5 ونطبع النتيجة. بعد ذلك، نخصص نصف قطر 6.0 للشكل ونخرج نصف القطر. وأخيرًا، نخصص نقطة مركزية بإحداثيات (10، 20) للشكل ونطبع إحداثيات المركز.

مثال 3: الاتحاد مع التعداد

في لغة C++، تخدم التعدادات، والتي يشار إليها عادة باسم التعدادات، غرض تعريف مجموعة من الثوابت المتكاملة المسماة. يمكن أن يكون الجمع بين التعدادات والتوحيدات مفيدًا في السيناريوهات التي نريد فيها تمثيل متغير يمكن أن يأخذ أنواعًا مختلفة، يرتبط كل منها بقيمة تعداد محددة.

هنا مثال:

#تشمل

استخدام اسم للمحطة ;

التعداد نوع البيانات {

عدد صحيح ,

يطفو ,

شار

} ;

اتحاد قيمة البيانات {

كثافة العمليات intValue ;

يطفو floatValue ;

شار charValue ;

} ;

البنية بيانات {

نوع نوع البيانات ;

قيمة قيمة البيانات ;

} ;

كثافة العمليات رئيسي ( )

{

بيانات البيانات1 , data2 , data3 ;

البيانات1. يكتب = عدد صحيح ;
البيانات1. قيمة . intValue = 42 ;

  data2. يكتب = يطفو ;
  data2. قيمة . floatValue = 3.14و ;

  data3. يكتب = شار ;
  data3. قيمة . charValue = 'أ' ;

cout << 'البيانات 1:' << البيانات1. قيمة . intValue << endl ;
cout << 'البيانات 2:' << data2. قيمة . floatValue << endl ;
cout << 'البيانات 3:' << data3. قيمة . charValue << endl ;

يعود 0 ;

}

في هذا المثال، لدينا برنامج يستخدم التعدادات والاتحادات والبنيات لإنشاء بنية بيانات مرنة قادرة على الاحتفاظ بأنواع مختلفة من القيم. يتم تعريف تعداد 'DataType' ليمثل ثلاثة أنواع أساسية من البيانات: INTEGER وFLOAT وCHAR. يعزز التعداد إمكانية قراءة التعليمات البرمجية وقابلية صيانتها من خلال تقديم مجموعة من الثوابت المتكاملة المسماة.

بعد ذلك، نقوم بإنشاء اتحاد يسمى 'DataValue' مع ثلاثة أعضاء: 'charValue' من النوع char، و'floatValue' من النوع float، و'intValue' من النوع int. مع الاتحاد، يتشارك هؤلاء الأعضاء في موقع ذاكرة مشترك مما يسمح للاتحاد باستيعاب قيم الأنواع المميزة بشكل متبادل. يتم بعد ذلك إنشاء بنية 'البيانات' التي تتكون من عضوين: عداد 'DataType' المسمى 'النوع' واتحاد 'DataValue' المسمى 'القيمة'. تسمح لنا هذه البنية بربط نوع البيانات بالقيمة المقابلة له، مما يوفر تمثيلاً منظمًا.

في الوظيفة 'الرئيسية'، نقوم بإنشاء مثيلات لبنية 'البيانات': 'data1' و'data2' و'data3'. نقوم بتعيين القيم لهذه الحالات عن طريق تحديد نوع البيانات وتعيين القيمة المناسبة داخل الاتحاد. على سبيل المثال، يتم تعيين 'data1' بنوع عدد صحيح بقيمة 42. وأخيرًا، نستخدم عبارات 'cout' لطباعة القيم المخزنة في كل مثيل 'بيانات'. يقوم البرنامج بإخراج القيمة الصحيحة لـ 'data1'، وقيمة الفاصلة العائمة لـ 'data2'، وقيمة الحرف 'data3'.

يوضح هذا المثال كيف يمكن استخدام الجمع بين التعدادات والاتحادات والبنيات لإنشاء تمثيل بيانات متعدد الاستخدامات وآمن للنوع في C++.

خاتمة

توفر اتحادات C++ آلية قوية ومرنة لإدارة أنواع البيانات المتنوعة ضمن مساحة ذاكرة واحدة. تسلط الأمثلة الموضحة في هذه المقالة الضوء على قدرة النقابات على التكيف وفعاليتها في معالجة مجموعة من السيناريوهات. من الاستخدامات الأساسية التي توضح قابلية تبادل أنواع البيانات إلى التطبيقات الأكثر تعقيدًا التي تتضمن الهياكل والتعدادات، تؤكد هذه الأمثلة على الكفاءة والقدرة على التكيف التي تجلبها النقابات إلى برمجة C++.