الفرق بين الهيكل والاتحاد

مؤلف: Laura McKinney
تاريخ الخلق: 1 أبريل 2021
تاريخ التحديث: 4 قد 2024
Anonim
الاتحاد الأوروبي
فيديو: الاتحاد الأوروبي

المحتوى


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

دعونا نفهم الفرق بين الهيكل والاتحاد ، إلى جانب مخطط المقارنة.

  1. رسم بياني للمقارنة
  2. تعريف
  3. الاختلافات الرئيسية
  4. التشابه
  5. خاتمة

رسم بياني للمقارنة

أساس المقارنةبناءاتحاد
الأساسييتم تخصيص موقع الذاكرة المنفصلة لكل عضو في البنية.جميع أعضاء الاتحاد تشترك في نفس موقع الذاكرة.
إعلانstruct struct_name {
اكتب element1 ؛
اكتب element2 ؛
.
.
} variable1، variable2، ...؛
الاتحاد u_name {
اكتب element1 ؛
اكتب element2 ؛
.
.
} variable1، variable2، ...؛
الكلمةالبنيةاتحاد
بحجمحجم الهيكل = مجموع حجم جميع أعضاء البيانات.حجم الاتحاد = حجم أكبر الأعضاء.
قيمة المتجريخزن القيم المتميزة لجميع الأعضاء.يخزن نفس القيمة لجميع الأعضاء.
في الوقتيخزن الهيكل قيم متعددة ، للأعضاء المختلفة ، للهيكل.يخزن الاتحاد قيمة واحدة في وقت واحد لجميع الأعضاء.
طريقة العرضتوفير طريقة واحدة لعرض كل موقع الذاكرة.توفير طريقة متعددة لعرض نفس موقع الذاكرة.
ميزة مجهولةلا ميزة مجهولة.يمكن الإعلان عن اتحاد مجهول.

تعريف الهيكل

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


لنأخذ مثالا.

هيكل الموظف اسم الشركة مدينة سلسلة } emp1، emp2.

هنا ، نعلن عن هيكل لتخزين معلومات الموظفين. يتم إنهاء الإعلان بواسطة فاصلة منقوطة ، حيث أن إعلان الهيكل عبارة عن بيان ، وفي C ++ يتم إنهاء العبارة بفاصلة منقوطة.

يعرّف الاسم المعطى للهيكل "النوع" (في المثال أعلاه ، اسم الهيكل هو "الموظف"). يمكن إنشاء متغيرات هذه الأنواع ، كما ذكرنا أعلاه ، أنشأنا متغيرين "emp1" و "emp2" من النوع "موظف". في المثال أعلاه ، أنشأنا متغير "بنية" بعد الإعلان مباشرةً ؛ بالتناوب ، يمكن أن تنشأ بشكل منفصل.

هيكل الموظف emp1، emp2؛ // بنية الكلمة الأساسية ليست إلزامية.

يمكن تهيئة أعضاء متغير بنية أو يمكن الوصول إليها باستخدام عامل التشغيل dot (.).

emp1.name = "أشوك".

يمكن تعيين المعلومات الموجودة في متغير بنية إلى متغير بنية آخر من نفس النوع على النحو التالي.

emp1.name = "أشوك". emp1.company_name = "Teckpix"؛ emp1.city = "دلهي". emp2 = emp1. / / تعيين قيم عضو emp1 إلى emp2. cout <

هنا ، قمنا بتعيين متغير الهيكل "emp1" إلى "emp2" ، لذلك ، "emp1" بنسخ كل قيمة أعضائه إلى العضو المقابل في "epm2".


يمكن تمرير عضو متغير الهيكل إلى الوظيفة.

وظي (emp1.city)؛

يمكن تمرير متغير الهيكل بأكمله إلى الوظيفة ، من خلال كل من الأساليب استدعاء حسب القيمة ونداء حسب المرجع.

funt (emp1)؛ // استدعاء وظيفة عن طريق الدعوة من خلال طريقة القيمة. . . وظيفة باطلة (struct employee emp) {// receving قيم أعضاء emp1. cout <

هنا ، لن ينعكس التغيير في قيمة عضو متغير الهيكل خارج الوظيفة حيث يتم تمرير المتغير عن طريق استدعاء حسب القيمة. الآن دعونا نفعل الشيء نفسه عن طريق الاتصال بواسطة الطريقة المرجعية.

funt (& emp1)؛ // استدعاء وظيفة عن طريق الدعوة عن طريق الطريقة المرجعية. . . funct void (struct employee * emp) {// receving address of emp1. emp-> مدينة = "نور". / / قم بتغيير قيمة العضو (المدينة) الخاص بالهيكل المتغير emp1. . }

هنا ، يتم تمرير متغير الهيكل بالرجوع لذلك ، فإن التغيير في قيمة أعضاء متغير الهيكل يعكس أيضًا خارج الوظيفة أيضًا.

موظف srtuct * emp ؛ / / decalring مؤشر بنية نوع الموظف. خطة الإدارة البيئية = & emp1. // تعيين عنوان emp1 إلى المؤشر. emp-> city // pointer للوصول إلى مدينة عضو emp1.

يمكن أيضًا إنشاء مؤشر الهيكل ؛ انها تحمل عنوان متغير الهيكل.

في الهيكل ، يُسمح بالتجميع الكلي عندما لا يحتوي تعريف البنية ، أو أي مُنشئ مُعرَّف من قبل المستخدم أو وظائف افتراضية أو فئة أساسية أو حقل خاص أو محمي.

int main () {struct epm3 = {"Anil"، "Teckpix"، "Nur"}؛ } // ممكن لأن هيكل الموظف لا يحتوي على أي من الأشياء المذكورة أعلاه.

تعريف الاتحاد

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

union u_type {int x، char c؛ تعويم و. } u1 ، u2 ؛

هنا ، أعلنا اتحاد يسمى u_type. أعضاء u_type هم 'x' من النوع الصحيح ، و 'c' من نوع الحرف و 'f' من النوع float. لقد أنشأنا أيضًا متغيري الاتحاد "u1" و "u2" ، من نوع "u_type" ، مباشرةً بعد إعلان الاتحاد. يمكننا أيضًا إعلان متغير الاتحاد بشكل منفصل عن إعلان الاتحاد.

int main () {union u_type u1، u2؛ // اتحاد الكلمات الرئيسية ليس إلزاميًا في الإصدار C ++. }

يمكن الوصول إلى أعضاء الاتحاد باستخدام عامل التشغيل dot (.) ، مسبوقًا بمتغير الاتحاد ويتبع عضو ذلك المتغير.

u1.x = 10؛

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

u1.x = 10؛ cout <

إذا حاولت تغيير قيمة أي عضو في "u1". سيتم تحديث العضو الآخر تلقائيًا بتلك القيمة.

u1.c = 65؛ cout <

المساحة المخصصة للاتحاد مساوية لحجم أكبر عضو في الاتحاد. نظرًا لأن البايت المخصص لـ 'char' هو 1 بايت ، 'int' هو 4 بايت و 'float' هو 4 بايت لذلك ، أكبر حجم هو 4 بايت. لذلك ، الذاكرة المخصصة لـ "u1" و "u2" هي 4 بايت.

int main () {int size_1 = sizeof (u1) ؛ // 4 int size_2 = sizeof (u2) ؛ // 4

يمكن إنشاء مؤشر الاتحاد كما هو الحال في الهيكل. المؤشر يحمل عنوان الاتحاد.

الاتحاد u_type * un ؛ الامم المتحدة = & U1. cout <إكس؛ // 10

مثل البنية ، يمكن أيضًا نقل الاتحاد إلى الوظائف من خلال كلتا الطريقتين ، أي الاتصال حسب القيمة والدعوة حسب المرجع.

وظي (U1)؛ // استدعاء وظيفة عن طريق الدعوة من خلال طريقة القيمة. . . الدالة الفارغة (اتحاد u_type un) {// receving قيمة العضو u1. cout <

الآن ، دعنا ندعو الوظيفة باستخدام طريقة الاتصال حسب المرجع.

وظي (و U1)؛ // استدعاء وظيفة عن طريق الدعوة عن طريق طريقة refrence. . . وظيفة باطلة (union u_type un) {// receving عنوان u1. الامم المتحدة> س = 20. }

هناك نوع خاص من الاتحاد في C ++ يسمى الاتحاد المجهول ”. لا يمكن أن يكون للاتحاد المجهول اسم النوع ، ولا يمكن إنشاء أي متغير لهذا الاتحاد. إنه فقط لإعلام المترجم أن المتغيرات الخاصة به هي مشاركة نفس الموقع. يمكن الإشارة إلى متغير اتحاد مجهول بدون عامل التشغيل dot (.) العادي.

int main () {union {// حدد اتحادًا مجهولًا بدون اسم الكتابة. int x، char c؛ تعويم و. }؛ س = 10؛ // أشار إلى متغير الاتحاد مع cout out out cout <

في الاتحاد المجهول ، لا يُسمح بأي وظيفة عضو ، ولا يمكن أن تحتوي على بيانات خاصة أو محمية ، ويجب تحديد الاتحاد العام المجهول كـ "ثابت".

النقاط التي يجب تذكرها لإعلان الاتحاد العادي.

  • يمكن أن يحتوي تعريف الاتحاد أيضًا على مُنشئ ومدمر.
  • يوفر الاتحاد طرقًا متعددة لعرض نفس موقع الذاكرة.
  • لا يمكن للاتحاد أن يرث الطبقة من أي نوع.
  • لا يمكن أن يكون الاتحاد طبقة أساسية.
  • لا يمكن أن يكون للاتحاد وظيفة العضو الظاهري.
  • الاتحاد لا يمكن أن يكون له متغير ثابت.
  1. يستخدم الهيكل موقع ذاكرة مختلف لأعضاء مختلفين. وبالتالي ، يمكن تخصيص القيمة المميزة لجميع الأعضاء. ولكن ، يخصص الاتحاد موقع الذاكرة نفسه لجميع الأعضاء. وبالتالي ، يمكن تخصيص قيمة واحدة لجميع الأعضاء.
  2. هيكل لديه موقع ذاكرة مختلفة لجميع الأعضاء. وبالتالي ، يمكن أن تحتوي على قيم متعددة في وقت واحد ، وكما نعلم أن الاتحاد يشارك موقع الذاكرة نفسه لجميع الأعضاء ، وبالتالي ، فإنه يمكن تخزين قيمة واحدة في وقت واحد.
  3. بشكل عام ، يكون الحجم الإجمالي للهيكل أكبر من الحجم الكلي للاتحاد لأن حجم الهيكل هو مجموع حجم جميع أعضاء الهياكل وحجم الاتحاد هو حجم عضو الاتحاد أكبر نوع.
  4. يوفر الهيكل طريقة عرض واحدة لكل موقع ، بينما يوفر الاتحاد طرق عرض متعددة لموقع واحد.
  5. يمكنك إعلان اتحاد مجهول ولكن ليس بنية مجهولة.

التشابه:

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

خاتمة:

كلاهما ، التركيب والاتحاد هما نوع بيانات الحاوية الذي يحتوي على عضو من أنواع مختلفة. ولكن يتم استخدام الهياكل عندما نحتاج إلى تخزين قيمة مميزة لجميع الأعضاء في موقع ذاكرة مميز. يتم استخدام النقابات عند الحاجة إلى تحويل النوع.