الوراثة تكون بين كلاسين class2 بمعني ان الكلاس الثاني يرث الكلاس الاول ويجب توضيح بعض المفاهيم وهي :
- Member variable وهي جميع الاعضاء داخل الكلاس تشمل الدوال و المتغيرات
- Member furcation وهي الدوال داخل الكلاس
- Member variable وهي المتغيرات داخل الكلاس
- Base class وهو الاصل
- Derived class هو الكلاس الذي يرث من الكلاس الاصل
وهنا نقوم بتعديلات على تعريف الوارثة من جديد
الوراثة هي :
علاقة بين 2 class او كثر حيث تصبح member variable تبع base class ضمن ال member variable تبع derived class
حتي الان نحنا كوووويسين ^_^
ندخل على الجد ^_*
فى الدروس السابقة لاحظنا وجود كلمتين تكتب داخل البلوك تبع الكلاس وهم private and public وسوف نزيد عليهم كمان واحدة اخرى protected .
المفيد
عارفين ان المتغيرات التي تعرف داخل البرايفت للايمكن الوصول لها الا من داخل الكلاس او باستخدام الكنستركشر
وتاني عارفين ان البليك هي الدوال التي يمكن ان نستخدمها خارج الكلاس تمام
نجي على ال protected وهي ايضا لا يمكن الوصول لها من خارج الكلاس واهميتها سوف تظهر خلال دروس الوراثة ان شاء الله .
لماذا نستخدم الوراثة :
نضرب مثال
لو لدينا موظف يكون لدية id و salary هكذا بيكون عندنا كلاس اسمه موظف ولدية متغيرين id and salary
ولدينا كلاس اخر (السجل المدني ) يحفظ الاسمأ name إذن لدينا كلاس اخر لدية متغير واحد وهو الاسم
ومحتاجين انه عند عرض بيانات الموظف نطبع id and salary ومعاه name كيف الكلام هذا ياريس ما قلت لنا name تابع لكلاس اخر اسم سجل مدني ايون يا باشا بس انا حعمل وراثة للكلاس تبع السجل وارسل المتغيرات الى الكلاس الاسمو الموظف ^_* ناصح ياد
طيب ما قلنا شغل البرايفت و البليك و البروتك حنتكلم عنو في الوراثة ؟! فين ياباشا انته بتسرح بينا وله اه
اتفضل يا عم ما تزعل :
تنقسم الوراثة الي ثلاثة اقسام وهي :
1- Public inheritance
2- Private inheritance
3- Protected inheritance
نجي نتكلم على النوع الاول
1- Public inheritance
لدينا اثنين كلاس A و B و كان الكلاس B يرث الكلاس A
• تكون public member تبع كلاس a معرفة على اساس public member فى الكلاس B
• تكون protected member تبع كلاس a معرفة على اساس protected member فى الكلاس B
• تكون private member تبع كلاس a غير معرفة فى الكلاس b
عارف اللعب اصبح كبير ^_* لكن مفيش مفر شدة وتزول ان شاء الله
بالمختصر المفيد كل الكلاس بيظهر المتعرف تحت pubilc and protected الاشيأ المتعرفة تحت انها برايفت privite
ناتي الي syntax :
class a{
private:
…………..
…..
public:
…….
};
class b:public a // هذه هي الصيغة التي يتم بها وراثة الكلاس
{
Private :
……..
public:
……
};
هناك شي اخر مهم عند استدعاء متغيرات الكلاس a عن طريق الكلاس b يجب ان نتكتب
b::b(int age1, string name1, int id1, double salry1):a(age1,name1)
هذا:
a(age1,name1)
هذة الاضافة تدل على ان هذة البرامترات تنتمي الى كلاسa
ندخل على المثال ونفهم اكثر
#include <iostream>
#include <string>
using namespace std;
class a // عرفنا كلاس a
{
private:
int age;
string name;
public:
void print()
{
cout<<"name ="<<name<< "\t"<<"age ="<<age<<endl;
}
void read_a()
{
cin>>name>>age;
}
a()
{
name="";
age=0;
}
a(int a1,string str)
{
age=a1;
name=str;
}
};
class b:public a // عرفنا كلاس بي وقلنا له اورث كلاس a
{
double salry;
int id;
public:
void print();
void read_b();
b();
b(int ,string ,int ,double );
};
int main()
{
b obj1;
cout<<"ob 1"<<endl;
obj1.print();
obj1.read_a();
obj1.print();
cout<< "obj 2"<<endl ;
b obj2(39,"momo",31,760);
obj2.print();
obj2.read_b();
obj2.print();
}
void b::read_b()
{
read_a();
cout<<id<<salry;
}
void b::print()
{
cout<<"id :"<<id<<endl;
a::print(); // استخدمنا هذة الصيغة لندخل على الكلاس الاخر ونضبع
cout<<"salary :"<<salry<<endl;
}
b::b()
{
a();
salry=0.0;
id=0;
}
b::b(int age1, string name1, int id1, double salry1):a(age1,name1)
/* هنا قمنا بتمرير البرمترات الخصاة ب كلاس
b واضفنا لها
البرامترات الخاصة بكلاس
a
لذلك قمنا يتزكير الكمبير خارج الاقواس بن هذه البرامترات تنتمي الي كلاس
a
*/
{salry=salry1;
id=id1;
}
