c++ - عربي - ستار تايمز العاب بلاى ستيشن




هل الكلمة الرئيسية "تجاوز" مجرد تحقق لطريقة افتراضية تم تجاوزها؟ (3)

بقدر ما أفهم ، فإن إدخال كلمة رئيسية في C ++ 11 لا يعدو كونه أكثر من مجرد فحص للتأكد من أن الوظيفة التي يتم تنفيذها هي override الدالة virtual في الفئة الأساسية.

هل هاذا هو؟



هذا في الواقع الفكرة. النقطة هي أنك صريح حول ما تعنيه ، بحيث يمكن تشخيص خطأ صامت خلاف ذلك:

struct Base
{
    virtual int foo() const;
};

struct Derived : Base
{
    virtual int foo()   // whoops!
    {
       // ...
    }
};

التعليمات البرمجية أعلاه برمجيًا ، ولكن ليس ما قد تعنيه (لاحظ const ). إذا قلت بدلاً من ذلك ، virtual int foo() override ، عندئذ ستحصل على خطأ مترجم بأن وظيفتك لا تكتفي في الواقع virtual int foo() override أي شيء.


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







virtual-method