سيتم تغطية المواضيع التالية بالشرح :
class
struct
public
private
distructor
اول اشي خليني اذكرك بأساسيات أي class و شو الفرق بينه و بين ال struct
ال struct عشان نكتبه لازم نكتب الأمور التالية
struct __name__ { body}
اما الclass عشان نكتبه في أمور ثانة اساسية
class __name___{ public:
__name___(){ body} //constructor
اذا بال struct نكتفي بكلمه struct بعدها الإسم وداخل الأقواس البيانات اللي سيحتويها
اما ال class بنحط class بعدين اسمه و بين الأقواس لازم نحط public: مبدئيا و بعدها ال constructor اللي هو اسم الكلاس و الأقواس زي ما هو موضح بالأعلى
الآن شو الفروق بينهم
1 الstruct ما فيه كلمه public و private
2 الstruct ما فيه constructor
3 الstruct فقط يحتوي على متغيرات بعكس ال class فيه متغيرات و functions
ال struct عشان نكتبه لازم نكتب الأمور التالية
struct __name__ { body}
اما الclass عشان نكتبه في أمور ثانة اساسية
class __name___{ public:
__name___(){ body} //constructor
اذا بال struct نكتفي بكلمه struct بعدها الإسم وداخل الأقواس البيانات اللي سيحتويها
اما ال class بنحط class بعدين اسمه و بين الأقواس لازم نحط public: مبدئيا و بعدها ال constructor اللي هو اسم الكلاس و الأقواس زي ما هو موضح بالأعلى
الآن شو الفروق بينهم
1 الstruct ما فيه كلمه public و private
2 الstruct ما فيه constructor
3 الstruct فقط يحتوي على متغيرات بعكس ال class فيه متغيرات و functions
خلينا نشوف الفرق بين ال public و ال private عشان بس نبدأ نكتب classes نبدأ اول شيء بمفهوم ال public
لما نعرف شيء تحت الpublic يكون هذا الشيء قابل للتعديل من ال main يعني مثلا حكينا
class student{ public: student(){}
int stu= 7;}
void main(){
student a;
a.stu=5;}
هون اولا اوضح جمله student a هاي معناها انو عنا a صارت تحمل صفات ال class مثل لما نحكي char x هون ال x صارت فيها صفات ال char و صارت تأخذ احرف
اما بالنسبه ل جملة x.stu=5 ف احنا بنسعمل ال dot operator اللي هو النقطة عشان ننادي اشي من الclass و بكون اول اشي اسم ال متغير اللي نسبناه للكلاس اللي يسمى object بعدين النقطه بعدين الإشي اللي بدنا نناديه
لما نعرف شيء تحت الpublic يكون هذا الشيء قابل للتعديل من ال main يعني مثلا حكينا
class student{ public: student(){}
int stu= 7;}
void main(){
student a;
a.stu=5;}
هون اولا اوضح جمله student a هاي معناها انو عنا a صارت تحمل صفات ال class مثل لما نحكي char x هون ال x صارت فيها صفات ال char و صارت تأخذ احرف
اما بالنسبه ل جملة x.stu=5 ف احنا بنسعمل ال dot operator اللي هو النقطة عشان ننادي اشي من الclass و بكون اول اشي اسم ال متغير اللي نسبناه للكلاس اللي يسمى object بعدين النقطه بعدين الإشي اللي بدنا نناديه
نكمل فكره الPublic اذا بتلاحظوا هون احنا لما عرفنا المتغير بال public اجا بال main و غير قيمتو
طيب مثلا لو اعتبرنا انو الclass تاعنا بدو يكون فيه functions ل حسابات الدائره
رح يكون عنا متغير اسمو pi و رح تكون قيمتو 3.14 لو حطيناه بال public هيك ممكن يجي أي حد بال main و يغير قيمتو
طب لو حد اجا و غير قيمتو هيك رح يخرب كل الحسابات اللي بتعتمد عليه اما لو حطيناه كالتالي
class circle{private: int pi=3.14;
public:
circle(){}
}
void main(){
circle c;
c.pi=12;
}
هون بهاي الحاله رح يعطينا خطء لئنو ال pi معرفه بال private اذا ما بصير نيجي نعدل عليها بال main إلا اذا كان عنا function بال class شغلو انو يعدل عليها ف بننادي الfunction و بشتغل شغلو
طيب مثلا لو اعتبرنا انو الclass تاعنا بدو يكون فيه functions ل حسابات الدائره
رح يكون عنا متغير اسمو pi و رح تكون قيمتو 3.14 لو حطيناه بال public هيك ممكن يجي أي حد بال main و يغير قيمتو
طب لو حد اجا و غير قيمتو هيك رح يخرب كل الحسابات اللي بتعتمد عليه اما لو حطيناه كالتالي
class circle{private: int pi=3.14;
public:
circle(){}
}
void main(){
circle c;
c.pi=12;
}
هون بهاي الحاله رح يعطينا خطء لئنو ال pi معرفه بال private اذا ما بصير نيجي نعدل عليها بال main إلا اذا كان عنا function بال class شغلو انو يعدل عليها ف بننادي الfunction و بشتغل شغلو
قبل الDistructor حابب اوضح متى بتنادا الconstructor
لما احنا نحكي student x بمجرد ما كتبنا x رح تتنفذ ال constructor مرره طيب لو حكينا student x(5)
بهاي الحاله رح يتنفذ Constructor بس رح يكون بوخذ معو قيمه
يعني بكون هيك{} student(int)
و بنسميه copy constructor هو نفس اللي بنكتبو دايما بس بوخذ معو قيمه
آخر موضوع اللي هو ال distructor من اسمو معناه المدمر يعني بدمر ال objects اللي نعملوا عشان يفضي الذاكره و بتنفذ بس يتسكر القوس اللي هو فيه و رح يتوضح كل اشي بالأمثله و الضيغه تاعتو نفس ال constructor بس قبلها بكون في إشارة ~
زي هيك
~circle(){}
لما احنا نحكي student x بمجرد ما كتبنا x رح تتنفذ ال constructor مرره طيب لو حكينا student x(5)
بهاي الحاله رح يتنفذ Constructor بس رح يكون بوخذ معو قيمه
يعني بكون هيك{} student(int)
و بنسميه copy constructor هو نفس اللي بنكتبو دايما بس بوخذ معو قيمه
آخر موضوع اللي هو ال distructor من اسمو معناه المدمر يعني بدمر ال objects اللي نعملوا عشان يفضي الذاكره و بتنفذ بس يتسكر القوس اللي هو فيه و رح يتوضح كل اشي بالأمثله و الضيغه تاعتو نفس ال constructor بس قبلها بكون في إشارة ~
زي هيك
~circle(){}
قبل شوي كنا ننادي بما يسمى بال dot operator اللي هو النقطة
لما كنا نحكي circle x
لاحظوا ال x مش pointer
طب لو كانت pointer اولا رح نعرفها كالتالي
circle *x;
x= new circle ;
هون صار عنا x بأشر عال circle
اول كنا ننادي بال "." اما لما يكون pointer هو اللي بحمل الصفات رح ننادي الأشياء من خلال ال arrow operator الل هو هيك "->" يعني مثلا بالمثال اللي فوق كانت a.stu
اما لما تصير الa مؤشر بنصير ننادي كالتالي a->stu
لما كنا نحكي circle x
لاحظوا ال x مش pointer
طب لو كانت pointer اولا رح نعرفها كالتالي
circle *x;
x= new circle ;
هون صار عنا x بأشر عال circle
اول كنا ننادي بال "." اما لما يكون pointer هو اللي بحمل الصفات رح ننادي الأشياء من خلال ال arrow operator الل هو هيك "->" يعني مثلا بالمثال اللي فوق كانت a.stu
اما لما تصير الa مؤشر بنصير ننادي كالتالي a->stu
خلينا نشوف امثلة عشان نفهم
void main(){
int z=4
ABC x, y(z);
object *b;
b=new object;
x.var=5;
cout<< b->x();
y.out(z);
}
مثلا لو كان عنا هاد الmain و حكالنا أكتب الكود اللي قبل الmain عشان يشتغل هاد الmain
اول اشي بنشوف شو أسماء ال classes اللي عنا بعدين بنشوف شو كل class فيه
يعني هون عنا كلاسين ABC و object
و الABC مرتبط فيها var و out(z)
اما ال object مرتبط فيها x()
يعني بصير حلنا كالتالي
class ABC{ public:
ABC(){}
ABC(int){} هاد بنسميه copy const
زي ما لاحظنا كان عنا( AbC Y(z
و z كانت int اذا ال const اللي تنفذ مع ال y رح يوخذ معو int
نكمل الحل
int var;
void out(int){} } و هون نفس الإشي ال function out
اخذت معها قيمه ف لازم نهيئها عشان توخذ قيمه
نكمل الحل بعد ما سكرنا اول claas بنحط
class object{ public: object(){}
int x(){}
}
زي ما لاحظنا انو الpointer ما اثر ع كتابه الكلاس
طيب ممكن حد يسأل كيف عرفت انو هديك ال function انها void و هاي int هون رح نرجع لأساسيات الfunction
اذا مش معموللها cout او "=" بنحط void اذا معموللها cout او "=" ما رح تكون void طب كيف بدنا نعرف نوعها بالعاده بكون نوع القيمه الراجعه نفس القيمه ال الداخله و اذا ما كانت بتوخذ قيمه نفترضها int المهم ما نحطها void بحاله ال cout or "="
int z=4
ABC x, y(z);
object *b;
b=new object;
x.var=5;
cout<< b->x();
y.out(z);
}
مثلا لو كان عنا هاد الmain و حكالنا أكتب الكود اللي قبل الmain عشان يشتغل هاد الmain
اول اشي بنشوف شو أسماء ال classes اللي عنا بعدين بنشوف شو كل class فيه
يعني هون عنا كلاسين ABC و object
و الABC مرتبط فيها var و out(z)
اما ال object مرتبط فيها x()
يعني بصير حلنا كالتالي
class ABC{ public:
ABC(){}
ABC(int){} هاد بنسميه copy const
زي ما لاحظنا كان عنا( AbC Y(z
و z كانت int اذا ال const اللي تنفذ مع ال y رح يوخذ معو int
نكمل الحل
int var;
void out(int){} } و هون نفس الإشي ال function out
اخذت معها قيمه ف لازم نهيئها عشان توخذ قيمه
نكمل الحل بعد ما سكرنا اول claas بنحط
class object{ public: object(){}
int x(){}
}
زي ما لاحظنا انو الpointer ما اثر ع كتابه الكلاس
طيب ممكن حد يسأل كيف عرفت انو هديك ال function انها void و هاي int هون رح نرجع لأساسيات الfunction
اذا مش معموللها cout او "=" بنحط void اذا معموللها cout او "=" ما رح تكون void طب كيف بدنا نعرف نوعها بالعاده بكون نوع القيمه الراجعه نفس القيمه ال الداخله و اذا ما كانت بتوخذ قيمه نفترضها int المهم ما نحطها void بحاله ال cout or "="
بهاد المثال رح اوضح فكره ال constructor & distructor
class A{ public:
A(){cout<<1}
A(int){cout<<2}
~A(){cout<<4}
}
class B{
public:
B(){cout<< 3}
~B(){cout<<5}
class A{ public:
A(){cout<<1}
A(int){cout<<2}
~A(){cout<<4}
}
class B{
public:
B(){cout<< 3}
~B(){cout<<5}
class c{
public: c(){cout<<6}
~c(){cout<<7} }
}
void main(){
public: c(){cout<<6}
~c(){cout<<7} }
}
void main(){
A x;
C q;
A y,z(4)
{ A v;
B e;}
B m;
}
بهاد الكود مطلوب نشوف شو ال output
زي ما اتفقنا ال const بتنفذ اول ما ننشأ object و ال distructor بتنفذ اول ما يتسكر ال قوس اللي موجود فيه الobject و تنفيذ ال dist بكون من الآخر للأول يعني لو الconst كان 1 2 3 ال dist رح يكون 3 2 1 و هسا رح نشوف كيف ب مثالنا
زي ما حكينا بدنا ال out put
اول اشي x من نوع A بعدين q من نوع C
y من نوع A بعدين Z من نوع A
بعدين "فتحنا قوس"
و كان عنا V من نوع A و e من نوع b بعدين "سكرنا القوس" ركزوا عالأقواس
بعدين m من نوع B و بعدين سكرنا قوس ال main
إذا الحل حيكون كالتالي
1
6
1
2
1 هون نفتح قوس
3 و هون تسكر فلما تنفذ ال dist تنفذ لل 3 بعدين لل 1
5
4
3
5 من هون بلش تنفيذ ال dist من آخر const ل أول const
4
4
7
4
C q;
A y,z(4)
{ A v;
B e;}
B m;
}
بهاد الكود مطلوب نشوف شو ال output
زي ما اتفقنا ال const بتنفذ اول ما ننشأ object و ال distructor بتنفذ اول ما يتسكر ال قوس اللي موجود فيه الobject و تنفيذ ال dist بكون من الآخر للأول يعني لو الconst كان 1 2 3 ال dist رح يكون 3 2 1 و هسا رح نشوف كيف ب مثالنا
زي ما حكينا بدنا ال out put
اول اشي x من نوع A بعدين q من نوع C
y من نوع A بعدين Z من نوع A
بعدين "فتحنا قوس"
و كان عنا V من نوع A و e من نوع b بعدين "سكرنا القوس" ركزوا عالأقواس
بعدين m من نوع B و بعدين سكرنا قوس ال main
إذا الحل حيكون كالتالي
1
6
1
2
1 هون نفتح قوس
3 و هون تسكر فلما تنفذ ال dist تنفذ لل 3 بعدين لل 1
5
4
3
5 من هون بلش تنفيذ ال dist من آخر const ل أول const
4
4
7
4
رح اعطيكم كمان فيديو تراجعوا ال functions منه
فيديو الشرح من هنا
ملاحظة:
بعد النقر على فيديو الشرح انتظر 5 ثوان ثم تخطي اعلانات في اعلى الصفحة
ليست هناك تعليقات:
إرسال تعليق