كورس C++ المتوسط – الحلقة السابعة: Structures و Enumerations
#برمجة
مقدمة
في البرامج الحقيقية لا نتعامل دائماً مع متغير واحد فقط، بل مع مجموعة بيانات مرتبطة ببعضها.
مثلاً الطالب لديه:
- اسم
- عمر
- درجة
بدلاً من إنشاء متغير لكل شيء:
string name;
int age;
double mark;
يمكننا جمعها داخل كيان واحد باستخدام:
Structure (Struct)
ما هو Struct؟
الـ Struct يسمح بتجميع عدة متغيرات مختلفة داخل نوع واحد.
مثال
#include <iostream>
using namespace std;
struct Student
{
string name;
int age;
double mark;
};
int main()
{
Student s1;
s1.name = "Ahmed";
s1.age = 20;
s1.mark = 95.5;
cout << s1.name << endl;
cout << s1.age << endl;
cout << s1.mark;
return 0;
}
الناتج
Ahmed
20
95.5
لماذا نستخدم Struct؟
بدلاً من:
string studentName[100];
int studentAge[100];
double studentMark[100];
يمكننا كتابة:
Student students[100];
ويصبح الكود أسهل بكثير.
إنشاء أكثر من طالب
Student s1;
Student s2;
Student s3;
مصفوفة من Struct
Student students[3];
مثال عملي
#include <iostream>
using namespace std;
struct Student
{
string name;
int age;
};
int main()
{
Student students[3];
for(int i = 0; i < 3; i++)
{
cout << "Name: ";
cin >> students[i].name;
cout << "Age: ";
cin >> students[i].age;
}
cout << "\nStudents:\n";
for(int i = 0; i < 3; i++)
{
cout << students[i].name
<< " - "
<< students[i].age
<< endl;
}
return 0;
}
Struct داخل Struct
struct Address
{
string city;
};
struct Student
{
string name;
Address addr;
};
الاستخدام
Student s;
s.addr.city = "Sanaa";
الدوال مع Struct
struct Student
{
string name;
int age;
};
void printStudent(Student s)
{
cout << s.name << endl;
cout << s.age << endl;
}
تمرير Struct بالمرجع
بدلاً من نسخ البيانات:
void printStudent(const Student& s)
{
cout << s.name;
}
وهذه طريقة أفضل وأسرع.
ما هو Enum؟
Enum اختصار:
Enumeration
ويستخدم لإنشاء مجموعة قيم ثابتة.
مثال
enum Day
{
Saturday,
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday
};
الاستخدام
Day today = Monday;
مثال كامل
#include <iostream>
using namespace std;
enum Day
{
Saturday,
Sunday,
Monday
};
int main()
{
Day today = Monday;
cout << today;
return 0;
}
الناتج
2
لأن:
Saturday = 0
Sunday = 1
Monday = 2
إعطاء قيم خاصة
enum Status
{
Success = 200,
NotFound = 404,
ServerError = 500
};
مثال
#include <iostream>
using namespace std;
enum Status
{
Success = 200,
NotFound = 404
};
int main()
{
cout << Success;
return 0;
}
الناتج
200
مشروع عملي: نظام طلاب
#include <iostream>
using namespace std;
struct Student
{
string name;
int age;
double mark;
};
int main()
{
Student s;
cout << "Name: ";
cin >> s.name;
cout << "Age: ";
cin >> s.age;
cout << "Mark: ";
cin >> s.mark;
cout << "\nStudent Info\n";
cout << "Name: " << s.name << endl;
cout << "Age: " << s.age << endl;
cout << "Mark: " << s.mark << endl;
return 0;
}
مشروع عملي: حالة الطلب
#include <iostream>
using namespace std;
enum OrderStatus
{
Pending,
Processing,
Completed
};
int main()
{
OrderStatus order = Processing;
if(order == Processing)
{
cout << "Order is processing";
}
return 0;
}
الفرق بين Struct و Class
| Struct | Class |
|---|---|
| public افتراضياً | private افتراضياً |
| للبيانات البسيطة | للأنظمة الكبيرة |
| أبسط | أكثر احترافية |
أخطاء شائعة
❌ نسيان النقطة:
student.name
❌ كتابة:
student->name
بدون مؤشرات.
❌ استخدام أرقام عشوائية بدلاً من Enum.
تمارين
التمرين 1
أنشئ Struct باسم Book يحتوي:
- title
- author
- price
التمرين 2
أنشئ مصفوفة تحتوي 5 كتب.
التمرين 3
أنشئ Enum باسم TrafficLight.
التمرين 4
اصنع برنامجاً يحدد حالة الإشارة باستخدام Enum.
التمرين 5
اصنع نظام طلاب يحتوي على:
- اسم
- عمر
- درجة
- طباعة البيانات
ملخص الحلقة السابعة
تعلمنا:
- Struct
- Arrays of Structs
- Nested Structs
- Functions with Structs
- Enum
- القيم المخصصة داخل Enum
- بناء أنظمة بيانات منظمة
في الحلقة الثامنة سنتعلم:
🔥 Linked List (القوائم المرتبطة)
وهي أول بنية بيانات حقيقية (Data Structure) يستخدمها المبرمجون المحترفون في الأنظمة الكبيرة والمقابلات التقنية. 🚀

تعليقات
إرسال تعليق