首页 > 解决方案 > 如何使派生类函数在调用时始终调用相同的基类函数?

问题描述

如何创建基类虚函数,以便在派生类调用其函数版本时始终调用它?BaseClass::foo()我知道我可以通过在函数开头编写类似的内容来调用基类函数DerivedClass::foo(),但是如果我希望默认调用它,而派生类的创建者甚至不知道基类函数做了什么?

class BaseClass
{
     BaseClass();
     virtual void foo() {
         printf("base");
     }
}

class DerivedClass : public BaseClass
{
    DerivedClass();
    void foo() {
        printf("derived");
    }
}

int main()
{
     DerivedClass dc;
     dc.foo();
}

应该打印:

base
derived

标签: c++inheritance

解决方案


这不是直接可能的。您可以将函数拆分为基类上的非虚拟函数和派生类上的foo(纯)虚拟函数:fooCore

class Base {
  protected:
    virtual void fooCore() = 0;
  public:
    void foo(){
      // do stuff, then call method of derived class
      this->fooCore();
    }
};

class Derived {
  protected:
    void fooCore() override { 
        //actual 
    };
};

从“外部”来看,呼叫Base::foo()保持不变。


推荐阅读