C++如何从基类调用派生类中的方法

adv*_*ner 7 c++ virtual-functions

我想要做的是Execute()运行并完成它调用Base::Done()然后调用Derived::Done().我这样做是因为Base上课Execute会做点什么,当它完成时会调用Derived::Done().我希望我能正确解释.有点像任务完成时调用的监听器.我有点坚持Base班级如何称呼Derived班级.

class Base
{
  virtual void Done(int code){};
  void Execute();
}

void Base::Execute()
{
}


class Derived : Base
{
  void Done(int code);
  void Run();
}

Derived::Done(int code)
{
}

void Derived::Run()
{
    Execute();
}
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 8

您可以使用模板方法:

class Base
{
 public:
  void Execute()
  {
    BaseDone(42);
    DoDone(42);
  }
 private:
  void BaseDone(int code){};
  virtual void DoDone(int) = 0;
};

class Derived : Base
{
 public:
  void Run() { Execute(); }
 private:
  void DoDone(int code) { .... }
};
Run Code Online (Sandbox Code Playgroud)

这里,Base控制如何使用自己的派生方法Execute(),派生类型只需要通过私有虚方法实现该实现的一个组件DoDone().