السلام عليكم الجميع
اليوم راح اشرح لكم عن موضوع مهم الى هو structure
طبعآ هو عباره عن مجموعه من البيانات و تكون محفوظة تحت اسم كلاس
يعني مجموعه من البيانات هي المتغيرات تكون داخل اسم كلاس و نقدر نستخدم اسم كلاس اكثر من مره بأسم Obj.
ملاحظة مهمة: في نوعين الى هو struct و class يختلفان ولايشبهون بعض و راح نشرح عن كلاس المره القادمة.
طيب ايش مهمة هذي كلاسات؟ هي تحفظ القيمة داخل المتغيرات اثناء تشغيل البرنامج
بعطيكم مثال بالكود:
هذا Syntax تبع Structure :
struct name { member_type }
لما نجي نستعدي الكلاس مثل كذا
name nam1 name1.member_type
في حال نستدعي اسم الكلاس name لازم نسوي له متغير جديد من نوع obj عشان نقدر نستخدم اسم المتغيرات داخل الكلاس و نسميه nam1 طبعآ نقدر نسميه اكثر من اسم
مثلآ nam1, nam2, nam3 و كل اسم متغير راح يكون له كلاس خاص فيه
بعدها عشان نستدعي اسم المتغير من داخل كلاس نضع نقطة امام اسم المتغير هكذا name1.member_type
طيب راح اشرح لكم بشكل عملي عشان توصل لكم المعلومة تمام.
تلاحظون معاي بعد ماحطينا Object الي هو student1
صار عندنا اكسس او مسموح لنا نستخدم المتغيرات التي داخل الكلاس student
لما عملت student1.name بعد النقطة تلاحظون ظهرت معاي خيارين او متغيرتين من اسم الكلاس هذا يعني استطيع استخدام المتغير
طيب خلونا نشوف الناتج كيف:
تلاحظون لما عملنا نتيجة طبعت لنا الاسم الطالب والمعدل 🙂
لانه المتغير الاسم انحفظ فيه الاسم Aziz والمعدل انحفظ فيه بالمتغير GPA
هذا يعني استطيع استخدام هذي البيانات في اي مكان بالبرنامج طلما اني استدعي اسم الكلاس
طيب هل نقدر نكتب اسم طالب ثاني ؟ يعني يكون اسم اول طالب عبدالعزيز وثاني طالب خالد؟
ايوه نقدر فقط نضيف obj ثاني يكون student2
شوفو معاي بالصوره:
هنا عملنا obj جديد الى هو student2 تمام
كذا نقدر نستخدم المتغيرات الى داخل اسم كلاس كأنه جديد و مختلف عن student1
تخيلو معاي كذا:
student1 يكون بالغرفة خاصة فيه و له بيانات مثل Aziz و المعدل 3
student2 يكون له غرفه خاصة له ايضآ ومختلفه عن student1 و له بيانات مثل khalid و المعدل 3.6
وايضآ نقدر نستخدم اسم object بالمصفوفات
بحيث ماتتعب نفسك و كل شوي تسوي object
فرضآ يكون عندي 5 طلاب و ابي اكتب كل اسماءهم مع المعدل 🙂
ونحتاج نكتب الكود زي كذا نكتب الاسم والمعدل وظهر لنا اول بيانات وهكذا:
student student1[5]; for (int i = 0; i < 5; i++) { cout<<" number: "<<i<<endl; cout<<" Enter name: "<<endl; cin>>student1[i].name; cout<<" Enter GPA " <<endl; cin>>student1[i].GPA; cout<<endl; cout<<" Name "<<student1[i].name; cout<<" GPA "<<student1[i].GPA<<endl; }
انا وقفت لانه بياخذ وقت لانه بالنهاية راح يطلعني من اللوب 🙂
مثل مالاحظنا صار كل مره يسوي obj جديد لانه صار عن طريق المصفوفات
ايضآ نقدر نستخدم الدوال او Functions
مثل ماذكرت احد الشروط في التحدي بالتويتر الى ماشافه هذا التحدي:
انه لازم تستخدم Functions و ايضآ نحتاج بوينتر او Pass by reference
الحين راح اشرح لكم كيف و الحين راح نسوي ثلاث دوال تمام
اول داله تكون الاسم
void name(student &student1);
تلاحظون معاي اني حطيت اسم الكلاس student و بعدها علامة reference & ثم اسم obj
لانه اي قيمة من داخل الدالة نقدر نستخدمها بالداله اخرى من غير اي مشاكل لاننا نعمل قيمة افتراضية
void name(student &student1); void gpa(student &student1); void display(student student1);
كذا عملنا ثلاث دوال ولكن تلاحظ الاخيره الى هي استعراض النتيجة او display ماله العلامة & referance ليه؟
لانه الدالة الاخيره ماتحتاج تنقل قيمة الافتراضية الى مكان اخر لانه خلاص اخر قيمة بيوصلها بيكون من gpa و name تمام.
و function call راح يكون هكذا
int main(){ student student1; name(student1); gpa(student1); display(student1); }
لازم نحط اسم obj داخل function call بحيث نقدر نستدعي المتغيرات الى داخل اسم الكلاس تمام.
خلينا نشوف بالصوره متحركة مع الكود كيف تكون الناتج:
#include<iostream> #include<string> using namespace std; struct student { string name; double GPA; }; void name(student &student1); void gpa(student &student1); void display(student student1); int main(){ student student1; name(student1); gpa(student1); display(student1); } void name(student &student1){ cout<<"Enter Student name: "<<endl; cin>>student1.name; } void gpa(student &student1){ cout<<"Enter GPA: "<<endl; cin>>student1.GPA; } void display(student student1){ cout<<"Student is: "<<student1.name<<" GPA: "<<student1.GPA<<endl; }
تلاحظون هنا مثل ماكتبت بالتحدي شروط يكون ثلاث دوال
دالة الاوله حطيت فيه فقط الاسم
داله الثانيه حطيت فيه فقط المعدل
دالة الاخيره يكون اظهار النتيجة
لما عملنا طباعة طبعت لنا الاسم و المعدل بنجاح
التحدي نفس الطريقة بضبط بس المره بيكون مع العمر مو معدل 🙂
بسبب اني عملت التحدي هذا لاني ابيكم تطبقون و تتعلمون كيف تحفظون القيمة طول اثناء البرنامج شغال حتى لو بعد تم تمرير القيمة على اكثر من الدوال.
و struct لها استخدامات كثيره مثل link list او الهاش او البوينتر
و تقدر تحط اكثر من struct واحد مو شرط يكون واحد فقط…
و النسبه تحدي الصرافه ATM
الصرافه ATM يعتبر تحدي متقدم او محترف يعني لو انت اتقنت struct بشكل جيد مع تمرير القيمة على اكثر من الدالة بالنجاح يصير الموضوع جدآ سهل عليك و ماياخذ لك وقت طويل.
وايضآ تقدر تسويه Class مو شرط يكون Struct ولكن اخترته لانه هذا موضوعنا اليوم 🙂
الي يبي تحدي هذا هو:
واشوفكم المره القادمة مع درس و تحدي بأذن الله
الى اللقاء.