如果我从另一个派生类和重写函数,我可以通过调用Base::myFunction()的派生类的实现内myFunc调用基函数。

However-是有办法在我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