سؤال

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

هذا مصطلح أنيق وأحب استخدامه، ولكن كيف يعمل إذا كانت الفئة المشتقة فئة أساسية في حد ذاتها

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

المحلول

إنه يعمل، لأن الفئة المشتقة يمكنها تجاوز وظيفة افتراضية خاصة للفئة الأساسية، حتى لو تجاوزت وظيفة الفئة الأساسية وظيفة الفئة الأساسية الخاصة بها.

هذا قانوني تمامًا:


class Parent
{
public:
  int foo() {return bar();} // the non-virtual public interface
private
  virtual int bar();
};

class Child : public Parent
{
private:
  virtual int bar();  // overrides Parent::bar()
};

class Grandchild : public Child
{
private:
  virtual int bar(); // overrides Child::bar();
};

نصائح أخرى

يمكن للفئة المشتقة أن تقرر بنفسها:

يمكنك فقط تجاوز الطريقة بالكامل من خلال تنفيذ الوظيفة الافتراضية.يمكنك زيادة الطريقة عن طريق استدعاء وظيفة الفئات "المتوسطة" في مرحلة ما في طريقة الفئة المشتقة.

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

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