مفهوم الـ Overriding في لغة البرمجة ++C

اقرأ في هذا المقال


مفهوم ال Overriding في لغة البرمجة ++C

تتيح لغة البرمجة سي بلس بلس للمبرمجين من استخدام مفهوم ال (Overriding) كغيرها من لغات البرمجة، والذي يعني تعريف نفس الدالة التي ورثها الكلاس المشتق (Derived class) من الكلاس الرئيسي (Super Class) من جديد، و هذه الدالة الجديدة تكون مشابهة للدالة الموروثة من حيث الشكل فقط، أي بمعنى آخر لها نفس الإسم و النوع و عدد الباراميترات لكن محتواها مختلف بهدف أن يكون متناسب أكثر مع الكلاس المشتق.

والهدف الرئيسي من استخدام مفهوم ال (Overriding) هو إتاحة الفرصة للكلاس المشتق ليقوم بتعريف الدوال حسب حاجته.

شروط استخدام مفهوم ال Overriding في لغة البرمجة ++C

هناك مجموعة من الشروط التي يجب أن تتحقق حتى يتمكن المبرمج من استخدام مفهوم ال (Overriding) في لغة البرمجة (++C) وهي:

  • يجب أن يستخدم المبرمج نفس الـ (Modifier) مع الدالة الجديدة أي يكون نفس الذي تم استخدامه مع الدالة القديمة، ويجب أن يكون من نوع (public)
    أو (protected).
  • عدد و نوع ال (Parameters) في الدالة الجديدة يجب أن يطابق عدد ونوع ال (Parameters) في الدالة القديمة.
  • نوع الذي يتم إرجاعه من الدالة الجديدة يجب أن يكون نفس نوع الإرجاع للدالة القديمة.
  • الدالة التي تم تعريفها من نوع (private)  لا يمكن أن يستخدم معها المبرمج مفهوم (Override)، حيث أن الكلمة (private)  تمنع إمكانية الوصول المباشر للدالة من الكلاس المشتق.
  • الدالة التي تم تعريفها من نوع (final) لا يمكن أن يستخدم معها المبرمج مفهوم ال (Overriding) حيث أن الكلمة (final)تمنع تغيير محتوى الدالة بعد تعريفها.
  • الدالة المعرفة من نوع (static) لا يمكن أن يستخدم معها المبرمج مفهوم ال (Overriding)، ولكن يتمكن من تعريفها من جديد في أي مكان، حيث أن كلمة
    (static) تجعل الدالة مشتركة بين جميع الكلاسات.
  • لا يمكن أن يستخدم المبرمج مفهوم ال (Overriding) مع الكونستركتور.
وفيما يلي مثال يوضح كيفية عمل مفهوم ال (Overriding) في لغة البرمجة سي بلس بلس:
// C++ program to demonstrate function overriding#include<iostream>usingnamespacestd; classBase {public: voidprint(){ cout << "Base Function" << endl; } }; classDerived :public Base { public: voidprint(){ cout << "Derived Function" << endl; } }; intmain(){ Derived derived1; derived1.print(); return0; }

شارك المقالة: