Заставить производный класс вызывать базовую функцию
-
19-09-2019 - |
Вопрос
Если я наследую класс от другого и перезаписываю функцию, я могу вызвать базовую функцию, вызвав 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++, вы не можете «невидимо» вызывать унаследованную функцию так, как вы хотите.
Единственные методы, вызывающие унаследованные классы, — это конструкторы и деструкторы.