在继续派生函数之前执行基函数

Ton*_*ion 4 c++ polymorphism

我正在尝试解决一个问题,其中我有一些类,我需要做一些常见的工作,然后是一堆特定于问题的工作,当这个完成时,对所有这些类做一些共同的处理.

我有一个Base和Derived类,它们都有一个名为Execute的函数.当我调用此函数的派生版本时,我希望能够对Base中的所有派生类进行一些公共处理,然后继续在Derived :: Execute中执行并返回 Base :: Execute来完成一些共同的工作.

这在C++中是否可行?如何最好地做到这一点?

这是一个想法,但它可能不是那么可行:

class Base
{
public:
   virtual void Execute();
};

Base::Execute() {
   // do some pre work
   Derived::Execute();  //Possible????
  // do some more common work...  
}


class Derived : public Base
{
public:
    void Execute();

};

void Derived::Execute()
{
   Base::Execute();
   //Do some derived specific work...
}

int main()
{

   Base * b = new Derived();

   b.Execute(); //Call derived, to call into base and back into derived then back into base

}
Run Code Online (Sandbox Code Playgroud)

Nim*_*Nim 9

使用基础的纯虚函数..

class Base
{
public:
   void Execute();
private:
   virtual void _exec() = 0;
};

Base::Execute() {
   // do some common pre work
   // do derived specific work
   _exec();
  // do some more common work...  
}


class Derived : public Base
{
private:
    void _exec() {
     // do stuff 
    }
};

int main()
{

   Base * b = new Derived();

   b.Execute();

}
Run Code Online (Sandbox Code Playgroud)

编辑:在阅读了一些问题之后稍微改变了流程.. :)上面的机制应该完全匹配你现在需要的 -

  1. 基本共同的东西
  2. 派生特定的东西
  3. 再次基础常见的东西

  • 当然,根据你的要求,你总是可以选择(1)使`_exec`非纯粹,例如一个无操作的实现,如果这会产生合理的结果; 和/或(2)使`Execute`为虚拟,这样派生类如果认为他们有更好的实现,就不会*遵循该模式. (4认同)