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

ما هو الهيكل في C++?
الهيكل هو C++ بنية البيانات التي يمكن استخدامها لتخزين عناصر من أنواع بيانات مختلفة معًا. في C++البنية هي نوع بيانات يُعرّفه المستخدم. تُنشئ البنية نوع بيانات للمجموعاتping عناصر من أنواع بيانات مختلفة ضمن نوع بيانات واحد.
فمثلا:
لنفترض أنك بحاجة إلى تخزين معلومات عن شخص ما واسمه وجنسيته وعمره. يمكنك إنشاء متغيرات مثل الاسم والجنسية والعمر لتخزين البيانات بشكل منفصل.
مع ذلك، قد تحتاج في المستقبل إلى تخزين معلومات عن العديد من الأشخاص. هذا يعني إنشاء متغيرات لأفراد مختلفين، مثل: الاسم، الجنسية، العمر، إلخ. لتجنب ذلك، يُفضّل إنشاء بنية بيانات (struct).
متى تستخدم الهيكل؟
فيما يلي بعض الأسباب لاستخدام البنية في C++.
- استخدم البنية عندما تحتاج إلى تخزين عناصر من أنواع بيانات مختلفة ضمن نوع بيانات واحد.
- C++ البنيات هي نوع قيمة بدلاً من كونها نوعًا مرجعيًا. استخدم البنية إذا كنت لا تنوي تعديل بياناتك بعد الإنشاء.
C++ تهيئة الهيكل
لخلق C++ البنية، نستخدم الكلمة الأساسية للبنية، متبوعة بمعرف. يصبح المعرف اسم البنية. هنا هو بناء الجملة لإنشاء C++ الهيكل:
بناء الجملة:
struct struct_name { // struct members }
في بناء الجملة أعلاه، استخدمنا الكلمة الأساسية struct. struct_name هو اسم البنية.
تتم إضافة أعضاء البنية داخل الأقواس المتعرجة. ربما ينتمي هؤلاء الأعضاء إلى أنواع بيانات مختلفة.
فمثلا:
struct Person { char name[30]; int citizenship; int age; }
في المثال أعلاه، الشخص عبارة عن بنية مكونة من ثلاثة أعضاء. يشمل الأعضاء الاسم والجنسية والعمر. عضو واحد من نوع بيانات char، في حين أن العضوين المتبقيين عبارة عن أعداد صحيحة عند إنشاء بنية، ولا يتم تخصيص الذاكرة. يتم تخصيص الذاكرة فقط بعد إضافة متغير إلى البنية.
إنشاء مثيلات البنية
في المثال أعلاه، قمنا بإنشاء بنية تسمى الشخص. يمكننا إنشاء متغير البنية على النحو التالي:
Person p;
p هو متغير هيكلي من النوع Person. يمكننا استخدام هذا المتغير للوصول إلى أعضاء البنية.
الوصول إلى أعضاء الهيكل
للوصول إلى أعضاء الهيكل، نستخدم مثيل الهيكل وعامل النقطة (.). على سبيل المثال، للوصول إلى عمر العضو في الهيكل Person:
p.age = 27;
لقد وصلنا إلى عمر العضو الخاص بشخص البنية باستخدام مثيل البنية، ص. لقد قمنا بعد ذلك بتعيين قيمة عمر العضو على 27 عامًا.
مثال 1:
#include <iostream> using namespace std; struct Person { int citizenship; int age; }; int main(void) { struct Person p; p.citizenship = 1; p.age = 27; cout << "Person citizenship: " << p.citizenship << endl; cout << "Person age: " << p.age << endl; return 0; }
الإخراج:
فيما يلي لقطة شاشة للكود:
Code التفسير:
- قم بتضمين ملف رأس iostream في برنامجنا لاستخدام الوظائف المحددة فيه.
- قم بتضمين مساحة الاسم std لاستخدام فئاتها دون استدعائها.
- إنشاء بنية باسم الشخص.
- بداية الجسم الهيكلي.
- قم بإنشاء عضو هيكلي يسمى الجنسية من النوع الصحيح.
- قم بإنشاء عضو هيكلي يسمى العمر من النوع عدد صحيح.
- نهاية الجسم الهيكلي.
- استدعاء الدالة الرئيسية (). يجب إضافة منطق البرنامج داخل نص هذه الوظيفة.
- قم بإنشاء مثيل للبنية الشخص وإعطائه الاسم p.
- اضبط قيمة جنسية عضو الهيكل على 1.
- اضبط قيمة عمر عضو البنية على 27.
- اطبع قيمة جنسية عضو البنية على وحدة التحكم إلى جانب بعض النصوص الأخرى.
- اطبع قيمة عمر عضو البنية على وحدة التحكم إلى جانب بعض النصوص الأخرى.
- يجب أن يقوم البرنامج بإرجاع قيمة إذا تم تشغيله بنجاح.
- نهاية الوظيفة الرئيسية ().
مؤشرات إلى الهيكل
من الممكن إنشاء مؤشر يشير إلى بنية. الأمر مشابه لكيفية إنشاء المؤشرات التي تشير إلى أنواع البيانات الأصلية مثل int وfloat وdouble وما إلى ذلك. لاحظ أن المؤشر في C++ سيتم تخزين موقع الذاكرة.
مثال 2:
#include <iostream> using namespace std; struct Length { int meters; float centimeters; }; int main() { Length *ptr, l; ptr = &l; cout << "Enter meters: "; cin >> (*ptr).meters; cout << "Enter centimeters: "; cin >> (*ptr).centimeters; cout << "Length = " << (*ptr).meters << " meters " << (*ptr).centimeters << " centimeters"; return 0; }
الإخراج:
فيما يلي لقطة شاشة للكود:
Code التفسير:
- قم بتضمين ملف رأس iostream في برنامجنا لاستخدام وظائفه.
- قم بتضمين مساحة الاسم std في برنامجنا لاستخدام فئاتها دون استدعائها.
- قم بإنشاء بنية تسمى الطول.
- بداية جسم الهيكل الطول.
- قم بإنشاء عضو هيكلي يسمى متر من نوع البيانات الصحيح.
- قم بإنشاء عضو هيكلي يسمى السنتيمترات من النوع عدد صحيح.
- نهاية جسم الهيكل الطول.
- استدعاء الدالة الرئيسية ().
- بداية نص الدالة main().
- قم بإنشاء متغير المؤشر *ptr والمتغير العادي l من النوع Length.
- قم بتخزين عنوان المتغير l في ملفنا متغير المؤشر.
- قم بعرض رسالة على وحدة التحكم تطلب من المستخدم إدخال قيمة العدادات المتغيرة.
- قراءة القيمة التي أدخلها المستخدم عبر لوحة المفاتيح. يتم هنا الوصول إلى عدادات وظائف الأعضاء باستخدام متغير المؤشر.
- قم بعرض رسالة على وحدة التحكم تطلب من المستخدم إدخال قيمة السنتيمترات المتغيرة.
- قراءة القيمة التي أدخلها المستخدم عبر لوحة المفاتيح. يتم هنا الوصول إلى سنتيمترات وظيفة العضو باستخدام متغير المؤشر.
- اعرض القيم المقروءة من المستخدم على وحدة التحكم بجانب بعض النصوص الأخرى.
- يجب أن يقوم البرنامج بإرجاع قيمة عند التنفيذ الناجح.
- نهاية نص الدالة main().
الهيكل كوسيطة دالة
يمكنك تمرير البنية إلى دالة كوسيطة. يتم ذلك بنفس طريقة تمرير وسيطة عادية. يمكن أيضًا تمرير متغيرات البنية إلى دالة. وخير مثال على ذلك هو عندما تحتاج إلى عرض قيم أعضاء البنية. دعونا نوضح هذا:
مثال 3:
#include<iostream> using namespace std; struct Person { int citizenship; int age; }; void func(struct Person p); int main() { struct Person p; p.citizenship = 1; p.age = 27; func(p); return 0; } void func(struct Person p) { cout << " Person citizenship: " << p.citizenship<<endl; cout << " Person age: " << p.age; }
الإخراج:
فيما يلي لقطة شاشة للكود:
Code التفسير:
- قم بتضمين ملف رأس iostream في ملفنا. سنستخدم بعد ذلك وظائفه دون الحصول على أخطاء.
- قم بتضمين مساحة الاسم std في برنامجنا لاستخدام فئاته. لن نحتاج إلى استدعاء مساحة الاسم لاستخدام فئاتها.
- إنشاء بنية باسم الشخص.
- بداية جسم الشخص الهيكلي.
- إنشاء عضو في هيكل الشخص. يُسمى العضو بالجنسية وهو من النوع الصحيح.
- إنشاء عضو في هيكل الشخص. يُسمى العضو بالعمر وهو من النوع عدد صحيح.
- نهاية جسد الشخص الهيكلي.
- قم بإنشاء دالة تأخذ مثيل struct Person، p، كوسيطة.
- استدعاء الوظيفة الرئيسية. يمثل { بداية نص الوظيفة الرئيسية ().
- قم بإنشاء مثيل لـ struct Person وإعطائه الاسم p.
- قم بالوصول إلى المواطنة المتغيرة لعضو البنية باستخدام مثيل البنية، p، وتعيين القيمة 1 لها.
- قم بالوصول إلى متغير عمر عضو البنية باستخدام مثيل البنية p، وتعيين القيمة 27 له.
- استدعاء الدالة وتمرير مثيل البنية الشخص، p، إليها كوسيطة.
- يجب أن تقوم الدالة بإرجاع قيمة عند التنفيذ الناجح.
- نهاية نص الدالة main().
- إنشاء نص الوظيفة.
- بداية جسم الوظيفة.
- قم بالوصول إلى قيمة جنسية عضو البنية وطباعتها على وحدة التحكم بجانب النص الآخر.
- قم بالوصول إلى قيمة عمر عضو البنية وطباعتها على وحدة التحكم بجانب النص الآخر.
- نهاية الجسم الوظيفي.
الحد من أ C++ بناء
وفيما يلي حدود الهياكل:
- لا يمكن التعامل مع نوع بيانات البنية مثل أنواع البيانات المضمنة.
- Operaتورس مثل + -، ولا يمكن استخدام الآخرين المتغيرات الهيكلية.
- الهياكل لا تدعم إخفاء البيانات. يمكن الوصول إلى أعضاء البنية بواسطة أي وظيفة بغض النظر عن نطاقها.
- لا يمكن الإعلان عن الأعضاء الثابتين داخل نص الهيكل.
- لا يمكن إنشاء المنشئين داخل الهيكل.



