موصى به, 2024

اختيار المحرر

الفرق بين الوراثة المفردة والمتعددة

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


رسم بياني للمقارنة

أساس للمقارنةوراثة واحدةالوراثة المتعددة
الأساسيةيرث الفئة المشتقة فئة أساسية مفردة.يرث الفئة المشتقة اثنين أو أكثر من فئتين أساسيتين.
التنفيذفئة classes_class: class_specifier الأساسيفئة مشتقة _class: access_specifier base_class1 و access_specifier base_class2 و ....
التمكن من
الطبقة المشتقة الوصول إلى ميزات فئة أساسية واحدةالطبقة المشتقة الوصول إلى الميزات المدمجة للفئات الأساسية الموروثة
رؤيةعام ، خاص ، محميعام ، خاص ، محمي
تشغيل الوقتتتطلب كمية صغيرة من وقت التشغيل على الرأسيتطلب زيادة وقت التشغيل الإضافي مقارنةً بالوراثة الفردية

تعريف الوراثة الواحدة

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

لنحصل على مثال واقعي لدينا فئتين ، "فئة الحساب" و "فئة حساب التوفير". هنا يمكن لـ "حفظ فئة الحساب" أن يرث ميزة "فئة الحساب" ، بحيث تصبح فئة "فئة الحساب" فئة أساسية / فائقة / الأصل لتوفير فئة الحساب ، و "حفظ فئة الحساب" ستكون فئة مشتقة.

وخصائص "صنف الحساب" هنا هي acc_no (خاص) والرصيد (عام) ، وتتم تهيئة وظائف الأعضاء () ، و get_accno () وهي عامة. أما الآن ، فيتم توريث "فئة الحساب" إلى "حفظ فئة الحساب" علنًا ، فيمكن الوصول إلى جميع الأعضاء العامين في "فئة الحساب" مباشرةً من خلال "حفظ فئة الحساب". ويمكنه الوصول إلى العضو الخاص في "فئة الحساب" من خلال وظائف الأعضاء العامة "فئة الحساب" ولكن لا يمكنه الوصول إليها مباشرة.

تنفيذ الوراثة الواحدة:

 # include باستخدام اسم مساحة std؛ حساب الصف {int acc_no،؛ الجمهور: توازن عائم void initialize (int x، int y) {acc_no = x؛ ميزان = ذ؛ } int get_accno. () {return acc_no؛ }}؛ class Saving_acc: public Account {float intrest_rate؛ public: // constructor of Saving_acc class Saving_acc (int c) {interest_rate = c؛ } void display () {cout < 

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

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

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

تنفيذ الميراث المتعدد:

 # include باستخدام مساحة الاسم std؛ class bike {int engine_cost؛ . public: void set_engine_cost (int x) {engine_cost = x؛ }}؛ class car {protected: int Model_no؛ public: void set_Model_no (int p) {Model_no = p؛ }}؛ class Vehical: public bike، public car {int no_of_wheels public: vehical (int w) {no_of_wheels = w؛ cout << "no of wheels" < 

الاختلافات الرئيسية بين الوراثة واحدة ومتعددة

  1. وراثة واحدة هي فئة مشتقة واحدة لها صنف أساسي واحد ، في حين أن لها ، في الوراثة المتعددة ، فئتين أساسيتين أو أكثر من فئتين أساسيتين ، بل فئة مشتقة مفردة.
  2. الميراث المتعدد مربك جداً حيث ترث طبقة مشتقة واحدة هنا فئة أساسية أو أكثر. إذا كانت الفئات الأساسية تحتوي على سمة أو دالة بنفس الاسم ثم للفئة المشتقة ، يصبح من الصعب تحديد خاصية أو وظيفة الفئة الأساسية التي يجب اشتقاقها.
  3. تكون المشكلات العامة أقل في حالة الميراث الوحيد. ولكن في حالة الميراث المتعدد ، يستدعي بناء الكائن أو التدمير المنشئات والمدمرة للفئة الأم في التسلسل الهرمي للفئة مما يزيد من الحمل.
  4. ميراث واحد هو أكثر نحو التخصص. في حين أن الميراث متعددة هو أكثر نحو التعميم.
  5. بما أن الوراثة الواحدة لها مقدار أقل من الحمل ، فإن وقت التشغيل أقل مقارنة بالوراثة المتعددة.

استنتاج

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

Top