سؤال

إذا اشتقت من فئة واحدة من وظيفة أخرى وكتابة وظيفة، يمكنني الاتصال بالدالة الأساسية عن طريق الاتصال Base::myFunction() داخل تنفيذ myFunc في الفئة المشتقة.

ومع ذلك، هل هناك طريقة لتحديد في بلدي Base الطبقة التي يتم استدعاء الوظيفة الأساسية على أي حال، أيضا دون أن تسمى صراحة في الوظيفة الكتابية؟ (إما قبل أو بعد تنفيذ الوظيفة المشتقة)

أو حتى أفضل، إذا كان لدي وظيفة افتراضية في ظاهرتي Base فئة، واثنين من الوظائف الخاصة المنفذة before() و after(), ، هل من الممكن تحديد في Base فئة ذلك قبل وبعد الوظيفة في أي فئة مشتقة من هذا Base يسمى الطبقة، before() و after() وسوف يطلق؟

شكرا!

هل كانت مفيدة؟

المحلول

لا، هذا غير ممكن.
ولكن يمكنك محاكاة ذلك عن طريق استدعاء وظيفة افتراضية مختلفة مثل:

class Base
{
public:
  void myFunc()
  {
    before();
    doMyFunc();
    after();
  }

  virtual void doMyFunc() = 0;
};

نصائح أخرى

أنت تحاول منع فئة مشتقة من التحميل الزائد / تجاوز طريقة في القاعدة. يمكنك تشجيعها عن طريق وضع العلامات على أنها "غير قابلة للتدخين" (اعتمادا على اللغة)، ولكن هناك دائما طريقة حولها.

بمعنى آخر، لا يمكنك إجبار شخص ما على استخدام فصلك بطريقة معينة، أخبرهم فقط بالطريقة التي يجب استخدامها.

الإجابة عن C ++، لا يمكنك الحصول على وظيفة موروثة "غير محسنة" تسمى بالطريقة التي تريدها.

الطريقة الوحيدة التي تتصل بها من خلال الفصول المورثة هي منشئون ودمرات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top