كل ما تحتاج لمعرفته حول الوراثة في C ++



ستزودك هذه المقالة بمعرفة مفصلة وشاملة عن الوراثة في لغة ++ C ، وأنواعها المختلفة وكيفية تنفيذها.

C ++ هي لغة كائنية التوجه. تجريد البيانات ، تعدد الأشكال ، التغليف ، والوراثة هي أحجار الزاوية لـ OOP. في هذا المنشور سوف نفهم ما هو الميراث؟ أنواع الوراثة في لغة ++ C ، وجميع المفاهيم اللازمة المتعلقة بها من البداية. في النهاية ، سننظر أيضًا في عيب هذا المفهوم القوي ونحاول حله.

ما هو الوراثة في سي ++

الوراثة هي واحدة من أقوى المفاهيم وأكثرها استخدامًا في C ++ أو أي لغة أخرى موجهة للكائنات. يتطلب فهم هذا المفهوم القليل من المعرفة بالفئات والأشياء. باستخدام الوراثة ، يمكننا إنشاء فئة تتكون من أساليب وصفات عامة. يمكن أن ترث هذه الفئة فئات أخرى تحتوي على طرق أكثر تحديدًا.





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

هياكل البيانات والخوارزميات في تعليمي جافا

من خلال القيام بذلك ، لا يتعين علينا كتابة الوظائف نفسها مرارًا وتكرارًا مما يوفر الوقت ويزيد من قابلية قراءة الكود.



بناء الجملة:

class der_class: access_type base_class {// class body}

الفئة الأساسية: يُطلق على الفئة التي تتكون من جميع الطرق والسمات العامة التي يمكن مشاركتها بواسطة الفئات الأخرى لزيادة إمكانية قراءة الكود فئة أساسية.

فئة مشتقة: الفئة التي تتكون من طرق أكثر تحديدًا وترث فئة تسمى فئة مشتقة. يمكن أن تكون الفئة المشتقة أيضًا فئة أساسية لبعض الفئات المشتقة الأخرى.



إذا أنشأنا فئة XYZ ، مع بعض السمات والطرق. الآن سيكون لطالب الفصل بعض السمات الأخرى ، ولكنه سيشمل أيضًا عناصر فئة XYZ وينطبق الشيء نفسه على فصل أعضاء هيئة التدريس. دعونا نرى الرسم التخطيطي:

لذلك ، سيرث الطالب وفئة أعضاء هيئة التدريس من XYZ.

محدد الوصول- لقد فهمنا كيف يمكن للفصل أن يرث فئة أخرى. لكن قد يقول بعض الأشخاص إنها طريقة غير آمنة حيث تتم مشاركة جميع سمات وطرق الفئة الأساسية أو الفئة الأصلية مع الفئة الفرعية أو الفئة المشتقة. على سبيل المثال ، إذا كانت الفئة 'بنك' موروثة من قبل فئة 'العملاء' و 'المستثمرين'. تتم مشاركة سمات فئة 'البنك' مثل 'كلمة مرور الخزنة' والمعلومات الأخرى المتعلقة بالعميل والبيانات الخاصة مع 'العملاء' وفئة 'المستثمرين' غير الآمنة.

لحل المشكلة المذكورة أعلاه ، يستخدم C ++ محددات الوصول للحد من وصول سمات الفئة الأساسية إلى الفئة المشتقة. يوجد إجمالي 3 أنواع من محددات الوصول في C ++

  1. عامة
  2. نشر
  3. محمي

يمنحك الجدول أدناه فهمًا جيدًا لنوع البيانات التي يمكن الوصول إليها بواسطة فئة مشتقة وفقًا لمحددات وصول مختلفة.

محدد الوصول البيانات العامة بيانات خاصة البيانات المحمية
نشر غير موروثغير موروثغير موروث
محمي محمي نشر محمي
عامة عامة نشر محمي

الميراث الواحد

يمكن اعتبار الميراث الفردي بمثابة شكل الفانيليا العادي للميراث. في الميراث الفردي ، ترث فئة واحدة من فئة أساسية.

#include using namespace std class Train {int Numberofwheels int Numberofcoaches public: void Traininfo (int n، int m) {Numberofwheels = n Numberofcoaches = m} void showinfo () {cout<تسمى حالة الميراث هذه بالميراث متعدد المستويات. تُعرف الفئة الواقعة بين الفئة الأولى والأخيرة أيضًا بالفئة الأساسية المتوسطة.ما رأيك ، هل يمكن أن يرث الفصل الأخير أعضاء من الدرجة الأولى؟ نعم انها تستطيع

#include using namespace std class First {protected: int a public: void getinfofirst (int x) {a = x} void showinfofirst () {std :: cout<< 'Value of a = ' < 

انتاج:

قيمة أ = 10

قيمة ب = 20

قيمة ج = 30

قيمة د = 50

الوراثة الهرمية

لا يمكن حل بعض المشكلات بمساعدة الميراث الفردي أو متعدد المستويات. في الوراثة الهرمية ، ترث أكثر من فئة واحدة من فئة أساسية واحدة.

#include using namespace std class College {public: College () {cout<< 'We are in class College' << endl } } class Student: public College { } class Faculty: public College { } int main() { Student student Faculty faculty return 0 }

انتاج:

نحن في فئة الكلية

نحن في فئة الكلية

الوراثة المتعددة في C ++

لقد رأينا في الوراثة الهرمية أن فئة أساسية واحدة بها أكثر من فئة مشتقة. في الوراثة المتعددة ، يكون للفئة المشتقة أكثر من فئة أساسية واحدة.

#include using namespace std class One {protected: int a public: void getinfoOne (int x) {a = x}} class Two {protected: int b public: void getinfoTwo (int y) {b = y}} class Main: عام واحد ، عام اثنان {public: void Display () {std :: cout<< 'Value of a = ' < في هذه المرحلة ، لدينا فهم جيد لجميع أنواع الوراثة المستخدمة في C ++. لكن ، انتظر ماذا لو أردنا استخدام نوعين مختلفين من الميراث؟ هل هو ممكن؟ نعم ، هذا ممكن بمساعدة الوراثة الهجينة. في الوراثة الهجينة ، نجمع بين نوعين مختلفين من الميراث. على سبيل المثال - الميراث متعدد المستويات والمتعدد ، الميراث الهرمي والمتعدد ، إلخ.

#include using namespace std class World {protected: int a public: void getinfoWorld (int x) {a = x}} class Continent: public World {protected: int b public: void getinfoContinent (int y) {b = y}} فئة البلد {محمية: int d public: void getinfoCountry (int m) {d = m}} class Australia: public Continent، public Country {public: void Display () {std :: cout<< 'Value of a = ' < 

دعونا نفهم الرسم البياني أعلاه الذي سيساعدنا في فهم مشكلة الماس. ترث الفئة B والفئة C من الفئة A ، وبالتالي فإن كلا من الفئة A والفئة B لها سمات وطرق من الفئة A. إذا كانت الفئة D ترث من الفئة B وكذلك الفئة C ، فستحتوي الفئة D على جميع سمات الفئة B والفئة C . كما أنه يحتوي على جميع سمات الفئة A الموروثة من الفئة B بالإضافة إلى الفئة C. وبالتالي إذا صنعنا كائنًا من الفئة D واستدعينا طريقة من الفئة A ، فسيتم إنشاء موقف غامض وسيتم الخلط بين المترجم من حيث يجب أن تصنف طريقة A ، من الفئة B أو الفئة D.

لحل هذا الغموض ، نستخدم مفهومًا يسمى الفئة الأساسية الافتراضية. عندما نجعل فئة أساسية فئة أساسية افتراضية ، يتم توريث نسخة واحدة فقط من تلك الفئة بغض النظر عن عدد المسارات الموجودة بين الفئة الأساسية الافتراضية والفئة المشتقة.

الفئة أ {} الفئة ب: عمومي ظاهري أ {} فئة ج: عام افتراضي أ {} فئة د: عام ج ، عام د {}

بهذا نكون قد وصلنا إلى نهاية هذا الميراث في مقالة ++ C. إذا كنت ترغب في معرفة المزيد ، تحقق من بواسطة Edureka ، شركة تعليمية موثوقة عبر الإنترنت. تم تصميم دورة تدريب وإصدار شهادات Java J2EE و SOA من Edureka لتدريبك على مفاهيم Java الأساسية والمتقدمة جنبًا إلى جنب مع العديد من أطر Java مثل Hibernate & Spring.

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات في هذه المدونة وسنعاود الاتصال بك في أقرب وقت ممكن.