الوراثة INHERITANCE في ++C

الوراثة INHERITANCE في ++C

الوراثة تكون بين  كلاسين 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;
}


قد تُعجبك هذه المشاركات