强制在子方法之前执行父方法,无需显式调用

2023-12-31

我正在开发一个 C++ 应用程序,但遇到了一个问题: 我有一个从抽象类 A 派生的类 B,它具有一些事件处理方法。第三个类 C 派生自 B,并且必须重新实现 B 的一些方法。有没有一种方法可以在调用 C 的方法之前隐式调用 B 的方法?

类图:

class A
{
    virtual void OnKeyPress(event e)=0;
};
class B : public A
{
    virtual void OnKeyPress(event e)
    {
    print("Keypressed: "+e)
    };
};
class C : public B
{
    void OnKeyPress(event e)
    {
    //DoSomething
    }
}

我想到的解决方法之一是使用 C::foo() 内的 B::foo() 从 C 调用父级方法。这可行,但开发人员需要记住在方法主体中添加调用。

另一种方法是定义一个新的虚拟方法,子级将重写该方法,而父级将在其“OnKeyPress”方法中调用该方法。

谢谢你, 3mpty。


您必须显式调用基类方法。

class C : public B
{
    virtual void OnKeyPress(event e)
    {
        B::OnKeyPress(e);
        // Do stuff
    }
};

只是重新阅读你的问题......

最好的办法是在 B 中实现方法,最后调用由 C 实现的附加受保护虚拟方法。

i.e.

class B : public A
{
  protected:
       virtual void AdditionalKeyStuff(event e) { }

  public:

    virtual void OnKeyPress(event e)
    {
        // Do B Stuff

        // Finally give decendants a go.
        AdditionalKeyStuff(e)
    }
};


class C : public B
{
  protected:

    virtual void AdditionalKeyStuff(event e)
    {
        // Do only C stuff
    }
};

如果您想强制任何后代覆盖它,您可以将 B 中的AdditionalKeyStuff(...) 设为纯虚拟。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强制在子方法之前执行父方法,无需显式调用 的相关文章

随机推荐