Заставить производный класс вызывать базовую функцию

StackOverflow https://stackoverflow.com/questions/1909945

Вопрос

Если я наследую класс от другого и перезаписываю функцию, я могу вызвать базовую функцию, вызвав Base::myFunction() внутри реализации myFunc в производном классе.

Однако есть ли способ определить в моем Base class, в котором базовая функция вызывается в любом случае, даже без ее явного вызова в перезаписанной функции?(либо до, либо после выполнения производной функции)

Или еще лучше, если у меня есть виртуальная функция в моем виртуальном 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