رسم بياني للمقارنة
أساس للمقارنة | وراثة واحدة | الوراثة المتعددة |
---|---|---|
الأساسية | يرث الفئة المشتقة فئة أساسية مفردة. | يرث الفئة المشتقة اثنين أو أكثر من فئتين أساسيتين. |
التنفيذ | فئة 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" <الاختلافات الرئيسية بين الوراثة واحدة ومتعددة
- وراثة واحدة هي فئة مشتقة واحدة لها صنف أساسي واحد ، في حين أن لها ، في الوراثة المتعددة ، فئتين أساسيتين أو أكثر من فئتين أساسيتين ، بل فئة مشتقة مفردة.
- الميراث المتعدد مربك جداً حيث ترث طبقة مشتقة واحدة هنا فئة أساسية أو أكثر. إذا كانت الفئات الأساسية تحتوي على سمة أو دالة بنفس الاسم ثم للفئة المشتقة ، يصبح من الصعب تحديد خاصية أو وظيفة الفئة الأساسية التي يجب اشتقاقها.
- تكون المشكلات العامة أقل في حالة الميراث الوحيد. ولكن في حالة الميراث المتعدد ، يستدعي بناء الكائن أو التدمير المنشئات والمدمرة للفئة الأم في التسلسل الهرمي للفئة مما يزيد من الحمل.
- ميراث واحد هو أكثر نحو التخصص. في حين أن الميراث متعددة هو أكثر نحو التعميم.
- بما أن الوراثة الواحدة لها مقدار أقل من الحمل ، فإن وقت التشغيل أقل مقارنة بالوراثة المتعددة.
استنتاج
يجعل الوراثة عمل المبرمج سهلاً كما لو أن طبقة واحدة قد تشكلت بالفعل يمكن تعديل خصائصه من قبل الآخرين إذا لزم الأمر. على الرغم من أن محدد الوصول يحد من الوصول إلى أعضاء الفئة الأساسية بطريقة معينة ، إلا أنه يجعل البيانات أكثر أمانًا. ميراث واحد هو بطريقة أو بأخرى أكثر بساطة وسهولة التنفيذ من الميراث متعددة. يقلل الوراثة من حجم رمز الكائن ، ولكنه يؤثر أيضًا في وقت تشغيل البرنامج.