override
تصريح إعادة التعريف override
override كلمة اختيارية لكن مهمة توضع بعد دالة بصنف مشتق لتؤكد أنها فعلًا تُعيد تعريف دالة virtual من الصنف الأساس.
بدون override، لو أخطأت بتوقيع الدالة (نوع معامل مختلف قليلًا أو نسيت const) فالمترجم يعتبرها دالة جديدة كليًا بدل إعادة تعريف — وتُكتشف المشكلة فقط وقت التشغيل لما لا يتصرف الكود تعدّديًا كما توقعت. override يجبر المترجم على التحقق: إذا لم توجد دالة virtual مطابقة بالضبط بالصنف الأساس، يرفض المترجم البناء فورًا.
الصياغة
class Derived : public Base {
ReturnType method(Params) override;
};📄 مثال
class Animal {
public:
virtual std::string sound() const { return "..."; }
};
class Dog : public Animal {
public:
std::string sound() const override { return "هاو هاو"; } // مطابق تمامًا
// std::string sound() override { return "x"; } // خطأ: نسيان const يفشل البناء بفضل override
};أهم النقاط
| العنصر | الوظيفة |
|---|---|
| override | يفرض تطابق التوقيع تمامًا مع دالة virtual بالصنف الأساس، وإلا خطأ ترجمة |
| final | يمنع أي صنف مشتق آخر من إعادة تعريف هذه الدالة مجددًا |
💡 نصائح عملية
- استخدم override على كل دالة تنوي إعادة تعريفها — تكتشف أخطاء التوقيع وقت الترجمة بدل التشغيل
- أضِف final لدالة أو صنف لو تريد منع أي وراثة أو إعادة تعريف أخرى مستقبلًا
⚠️ أخطاء شائعة
- الاعتماد على تشابه التوقيع بدون كتابة override فيمر خطأ توقيع صامتًا ويظهر كخلل سلوكي بوقت التشغيل فقط
- استخدام override على دالة ليست virtual أصلًا بالصنف الأساس — خطأ ترجمة مباشر
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CPP الكامل بالعربي.