6

如果我从另一个类派生一个类并覆盖一个函数,我可以通过在派生类Base::myFunction()的实现内部调用来调用基函数。myFunc

但是 - 有没有办法在我的Base类中定义在任何情况下都调用基函数,也不需要在覆盖函数中显式调用它?(在派生函数执行之前或之后)

或者更好的是,如果我的虚拟Base类中有一个虚拟函数,并且有两个实现的私有函数before()and after(),是否可以在Base类中定义调用该类的任何派生类中的函数之前和之后的函数Basebefore()并将after()被调用?

谢谢!

4

3 回答 3

21

不,这是不可能的。
但是您可以通过调用不同的虚函数来模拟它,如下所示:

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

  virtual void doMyFunc() = 0;
};
于 2009-12-15T19:59:25.847 回答
0

您试图防止派生类重载/覆盖基类中的方法。您可以通过将方法标记为“不可覆盖”(取决于语言)来鼓励它,但总有办法绕过它。

换句话说,您不能强迫某人以特定方式使用您的课程,而只能告诉他们应该使用的方式。

于 2009-12-15T19:58:29.063 回答
0

回答 C++,您不能以您想要的方式“不可见地”调用继承的函数。

通过继承类调用的唯一方法是构造函数和析构函数。

于 2009-12-15T20:01:32.350 回答