C++ الهيكل مع المثال

ما هو الهيكل في C++?

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

فمثلا:

لنفترض أنك بحاجة إلى تخزين معلومات عن شخص ما واسمه وجنسيته وعمره. يمكنك إنشاء متغيرات مثل الاسم والجنسية والعمر لتخزين البيانات بشكل منفصل.

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

متى تستخدم الهيكل؟

فيما يلي بعض الأسباب لاستخدام البنية في 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;
}

الإخراج:

الوصول إلى أعضاء الهيكل

فيما يلي لقطة شاشة للكود:

الوصول إلى أعضاء الهيكل

شرح الكود:

  1. قم بتضمين ملف رأس iostream في برنامجنا لاستخدام الوظائف المحددة فيه.
  2. قم بتضمين مساحة الاسم std لاستخدام فئاتها دون استدعائها.
  3. إنشاء بنية باسم الشخص.
  4. بداية الجسم الهيكلي.
  5. قم بإنشاء عضو هيكلي يسمى الجنسية من النوع الصحيح.
  6. قم بإنشاء عضو هيكلي يسمى العمر من النوع عدد صحيح.
  7. نهاية الجسم الهيكلي.
  8. استدعاء الدالة الرئيسية (). يجب إضافة منطق البرنامج داخل نص هذه الوظيفة.
  9. قم بإنشاء مثيل للبنية الشخص وإعطائه الاسم p.
  10. اضبط قيمة جنسية عضو الهيكل على 1.
  11. اضبط قيمة عمر عضو البنية على 27.
  12. اطبع قيمة جنسية عضو البنية على وحدة التحكم إلى جانب بعض النصوص الأخرى.
  13. اطبع قيمة عمر عضو البنية على وحدة التحكم إلى جانب بعض النصوص الأخرى.
  14. يجب أن يقوم البرنامج بإرجاع قيمة إذا تم تشغيله بنجاح.
  15. نهاية الوظيفة الرئيسية ().

مؤشرات إلى الهيكل

من الممكن إنشاء مؤشر يشير إلى بنية. الأمر مشابه لكيفية إنشاء المؤشرات التي تشير إلى أنواع البيانات الأصلية مثل 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;
}

الإخراج:

مؤشرات إلى الهيكل

فيما يلي لقطة شاشة للكود:

مؤشرات إلى الهيكل

شرح الكود:

  1. قم بتضمين ملف رأس iostream في برنامجنا لاستخدام وظائفه.
  2. قم بتضمين مساحة الاسم std في برنامجنا لاستخدام فئاتها دون استدعائها.
  3. قم بإنشاء بنية تسمى الطول.
  4. بداية جسم الهيكل الطول.
  5. قم بإنشاء عضو هيكلي يسمى متر من نوع البيانات الصحيح.
  6. قم بإنشاء عضو هيكلي يسمى السنتيمترات من النوع عدد صحيح.
  7. نهاية جسم الهيكل الطول.
  8. استدعاء الدالة الرئيسية ().
  9. بداية نص الدالة main().
  10. قم بإنشاء متغير المؤشر *ptr والمتغير العادي l من النوع Length.
  11. قم بتخزين عنوان المتغير l في ملفنا متغير المؤشر.
  12. قم بعرض رسالة على وحدة التحكم تطلب من المستخدم إدخال قيمة العدادات المتغيرة.
  13. قراءة القيمة التي أدخلها المستخدم عبر لوحة المفاتيح. يتم هنا الوصول إلى عدادات وظائف الأعضاء باستخدام متغير المؤشر.
  14. قم بعرض رسالة على وحدة التحكم تطلب من المستخدم إدخال قيمة السنتيمترات المتغيرة.
  15. قراءة القيمة التي أدخلها المستخدم عبر لوحة المفاتيح. يتم هنا الوصول إلى سنتيمترات وظيفة العضو باستخدام متغير المؤشر.
  16. اعرض القيم المقروءة من المستخدم على وحدة التحكم بجانب بعض النصوص الأخرى.
  17. يجب أن يقوم البرنامج بإرجاع قيمة عند التنفيذ الناجح.
  18. نهاية نص الدالة 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;
}

الإخراج:

الهيكل كوسيطة دالة

فيما يلي لقطة شاشة للكود:

الهيكل كوسيطة دالة

شرح الكود:

  1. قم بتضمين ملف رأس iostream في ملفنا. سنستخدم بعد ذلك وظائفه دون الحصول على أخطاء.
  2. قم بتضمين مساحة الاسم std في برنامجنا لاستخدام فئاته. لن نحتاج إلى استدعاء مساحة الاسم لاستخدام فئاتها.
  3. إنشاء بنية باسم الشخص.
  4. بداية جسم الشخص الهيكلي.
  5. إنشاء عضو في هيكل الشخص. يُسمى العضو بالجنسية وهو من النوع الصحيح.
  6. إنشاء عضو في هيكل الشخص. يُسمى العضو بالعمر وهو من النوع عدد صحيح.
  7. نهاية جسد الشخص الهيكلي.
  8. قم بإنشاء دالة تأخذ مثيل struct Person، p، كوسيطة.
  9. استدعاء الوظيفة الرئيسية. يمثل { بداية نص الوظيفة الرئيسية ().
  10. قم بإنشاء مثيل لـ struct Person وإعطائه الاسم p.
  11. قم بالوصول إلى المواطنة المتغيرة لعضو البنية باستخدام مثيل البنية، p، وتعيين القيمة 1 لها.
  12. قم بالوصول إلى متغير عمر عضو البنية باستخدام مثيل البنية p، وتعيين القيمة 27 له.
  13. استدعاء الدالة وتمرير مثيل البنية الشخص، p، إليها كوسيطة.
  14. يجب أن تقوم الدالة بإرجاع قيمة عند التنفيذ الناجح.
  15. نهاية نص الدالة main().
  16. إنشاء نص الوظيفة.
  17. بداية جسم الوظيفة.
  18. قم بالوصول إلى قيمة جنسية عضو البنية وطباعتها على وحدة التحكم بجانب النص الآخر.
  19. قم بالوصول إلى قيمة عمر عضو البنية وطباعتها على وحدة التحكم بجانب النص الآخر.
  20. نهاية الجسم الوظيفي.

الحد من أ C++ بناء

وفيما يلي حدود الهياكل:

  • لا يمكن التعامل مع نوع بيانات البنية مثل أنواع البيانات المضمنة.
  • Operaتورس مثل + -، ولا يمكن استخدام الآخرين المتغيرات الهيكلية.
  • الهياكل لا تدعم إخفاء البيانات. يمكن الوصول إلى أعضاء البنية بواسطة أي وظيفة بغض النظر عن نطاقها.
  • لا يمكن الإعلان عن الأعضاء الثابتين داخل نص الهيكل.
  • لا يمكن إنشاء المنشئين داخل الهيكل.

الملخص

  • البنية عبارة عن بنية بيانات تقوم بتخزين عناصر البيانات التي تنتمي إلى أنواع مختلفة.
  • بينما تقوم المصفوفة بتخزين عناصر البيانات من نوع مماثل، تقوم البنية بتخزين عناصر البيانات من أنواع مختلفة.
  • يجب استخدام البنية عندما لا يُتوقع من عناصر البيانات تغيير القيمة.
  • يتم الوصول إلى أعضاء الهيكل باستخدام عامل النقطة (.).
  • يتعين علينا إنشاء مثيل للبنية.
  • لخلق C++ البنية، نستخدم الكلمة الأساسية الهيكلية.
  • يتم إنشاء المؤشرات التي تشير إلى البنية بشكل مشابه لكيفية إنشاء المؤشرات التي تشير إلى الأنواع العادية.
  • يمكن تمرير البنية كوسيطة إلى دالة بنفس الطريقة التي يتم بها تمرير الوظائف العادية.