强制派生类调用基函数

时间:2009-12-15 19:54:12

标签: c++ inheritance virtual overwrite base-class

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

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

或者甚至更好,如果我的虚拟Base类中有虚函数,并且有两个实现的私有函数before()after(),则可以在{{1在调用此Base类的任何派生类中的函数之前和之后的类,将调用Basebefore()

谢谢!

3 个答案:

答案 0 :(得分:21)

不,这是不可能的。
但你可以通过调用不同的虚函数来模拟它:

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

  virtual void doMyFunc() = 0;
};

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

回答C ++,你不能以你想要的方式“无形地”调用一个继承的函数。

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