تجاوز وظيفة C ++

C Function Overriding



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

في تجاوز الوظيفة ، تعيد الفئة الفرعية تعريف الوظيفة التي تم تعريفها بالفعل في صنفها الأصلي.







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



الآن ، سنرى بعض الأمثلة ونفهم مفهوم تجاوز الوظيفة في C ++.



مثال 1

لقد حددت فئتين في رمز المثال أدناه - فئة أساسية وفئة مشتقة. تحتوي الفئة الأساسية على وظيفة عضو ، أي disp (). تم توارث Derived_Class من Base_Class. وظيفة disp () موجودة في Base_Class ثم أعيد تعريفها في Derived_Class.





في الدالة main () ، يتم إنشاء كائن من فئة Derived_Class ، أي d. بعد ذلك ، نسمي الدالة disp () على كائن الفئة المشتق ، لذلك سيتم استدعاء الوظيفة في الفئة المشتقة. يتم تجاهل إصدار الفئة الأساسية هنا. يمكنك أن ترى أدناه الإخراج كـ - disp () وظيفة في الفئة المشتقة.

#يشمل

استخدام اسم للمحطة؛

// فئة أساسية
فئة Base_Class
{
عام:
فارغفائدة()
{
كلفة<< 'disp () وظيفة في الفئة الأساسية.' <<endl؛
}

}؛

//فئة مشتقة
فئة Derived_Class:Base_Class العامة
{
عام:
فارغفائدة()
{
كلفة<< 'disp () وظيفة في فئة مشتقة' <<endl؛
}
}؛

intالأساسية()
{
المشتقة_الفئة د؛
د.فائدة()؛ // disp () وظيفة على كائن فئة مشتق
إرجاع 0؛
}



مثال 2

في هذا المثال ، سنرى كيفية استدعاء إصدار الفئة الأساسية للوظيفة عن عمد من خلال كائن الفئة المشتق. في تعريف دالة الفئة المشتقة ، نستخدم عامل دقة النطاق [::] لاستدعاء إصدار الفئة الأساسية للوظيفة.

#يشمل

استخدام اسم للمحطة؛

فئة Base_Class
{
عام:
فارغفائدة()
{
كلفة<< 'disp () وظيفة في الفئة الأساسية.' <<endl؛
}

}؛

فئة Derived_Class:Base_Class العامة
{
عام:
فارغفائدة()
{
Base_Class::فائدة()؛ // استدعاء إصدار الفئة الأساسية من disp ()
}
}؛

intالأساسية()
{
المشتقة_الفئة د؛
د.فائدة()؛
إرجاع 0؛
}

مثال 3

هذا مثال آخر لتجاوز الوظيفة. في هذا المثال ، أنشأنا فئة الأصل - Animal وفئتان مشتقتان - Duck and Dog. تحتوي الفئة الأساسية ، أي فئة الحيوان ، على صوت وظيفة العضو ().

في الفئة المشتقة / الفئة الفرعية ، أي الكلب ، قمنا بإعادة تعريف نفس الوظيفة ، أي sound () ، لتجاوز تعريف الفئة الأساسية الخاص بها. وبالمثل ، في الفئة المشتقة الأخرى ، أي Duck ، قمنا بإعادة تعريف نفس الوظيفة ، أي الصوت ().

في الوظيفة () الرئيسية ، قمنا بإنشاء كائن الكلب الخاص بـ Dog and duck of Duck. لذلك ، الآن عندما نطلق على وظيفة sound () للكلب والبط ، ستستدعي نسخة الفئة المشتقة من وظيفة sound (). يمكنك رؤية إخراج البرنامج كما هو موضح أدناه. لذلك ، بمساعدة تجاوز الوظيفة ، يمكننا استدعاء الدالة المشتقة الخاصة بالفئة.

#يشمل

استخدام اسم للمحطة؛

فئة الحيوان
{
عام:
فارغيبدو()
{
كلفة<< 'صوت الحيوان!' <<endl؛
}

}؛

// الطبقة المشتقة - فئة الكلاب
فئة الكلب:حيوان عام
{
عام:
فارغيبدو()
{
كلفة<< 'صوت الكلب - لحاء.' <<endl؛
}
}؛

// الطبقة المشتقة - فئة البط
فئة بطة:حيوان عام
{
عام:
فارغيبدو()
{
كلفة<< 'صوت البطة - دجال'. <<endl؛
}
}؛


intالأساسية()
{
الكلب كلب؛
بطة بطة؛

كلب.يبدو()؛ // صوت () كلب
بطة.يبدو()؛ // صوت () البطة

إرجاع 0؛
}

استنتاج

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