فرض فئة مشتقة لدعوة وظيفة
-
19-09-2019 - |
سؤال
إذا اشتقت من فئة واحدة من وظيفة أخرى وكتابة وظيفة، يمكنني الاتصال بالدالة الأساسية عن طريق الاتصال Base::myFunction()
داخل تنفيذ myFunc
في الفئة المشتقة.
ومع ذلك، هل هناك طريقة لتحديد في بلدي Base
الطبقة التي يتم استدعاء الوظيفة الأساسية على أي حال، أيضا دون أن تسمى صراحة في الوظيفة الكتابية؟ (إما قبل أو بعد تنفيذ الوظيفة المشتقة)
أو حتى أفضل، إذا كان لدي وظيفة افتراضية في ظاهرتي Base
فئة، واثنين من الوظائف الخاصة المنفذة before()
و after()
, ، هل من الممكن تحديد في Base
فئة ذلك قبل وبعد الوظيفة في أي فئة مشتقة من هذا Base
يسمى الطبقة، before()
و after()
وسوف يطلق؟
شكرا!
المحلول
لا، هذا غير ممكن.
ولكن يمكنك محاكاة ذلك عن طريق استدعاء وظيفة افتراضية مختلفة مثل:
class Base
{
public:
void myFunc()
{
before();
doMyFunc();
after();
}
virtual void doMyFunc() = 0;
};
نصائح أخرى
أنت تحاول منع فئة مشتقة من التحميل الزائد / تجاوز طريقة في القاعدة. يمكنك تشجيعها عن طريق وضع العلامات على أنها "غير قابلة للتدخين" (اعتمادا على اللغة)، ولكن هناك دائما طريقة حولها.
بمعنى آخر، لا يمكنك إجبار شخص ما على استخدام فصلك بطريقة معينة، أخبرهم فقط بالطريقة التي يجب استخدامها.
الإجابة عن C ++، لا يمكنك الحصول على وظيفة موروثة "غير محسنة" تسمى بالطريقة التي تريدها.
الطريقة الوحيدة التي تتصل بها من خلال الفصول المورثة هي منشئون ودمرات.