c# 在 C++ 中重写的方法

c# way of overriding in c++

在 c# winform 中,我们可以创建一个对象来覆盖基类的某些功能 class,而无需了解基类的实现。例如,我们创建 TouchButton : Button 然后仅覆盖 WndProc 函数,并且 Button 的实现对我们不可见。 在 C++ 中,我有一个接口,例如 class IButton,它包含所有虚拟方法。在我的 dll 实现中它将 return IButton 的实现。现在假设我想在不知道 Button 实现的情况下覆盖某些方法。

class TouchButton : public IButton
{
 public:
    IButton& mBase;
    TouchButton(IButton& Base)
        : mBase(Base)
    {};
    void SetSize(int x,int y)
    {
        mBase.SetSize(x,y);
    }
    void Visible(bool v)
    {
        mBase.Visible(v);
    }
    void Click(int x,int y)
    {
        // override
    }
}

好的,现在问题是我只想覆盖一个函数,但我必须一次又一次地复制和粘贴这些 mBase.Function(...) 东西,这绝对不是优雅的做法它。有没有更好的方法来存档相同的结果?

提前致谢。

您可以添加一个 IButtonForwarder,它存储引用并为每个成员执行默认转发:

class IButtonForwarder : public IButton
{
 public:
    IButton& mBase;
    IButtonForwarder(IButton& Base)
        : mBase(Base)
    {};
    virtual void SetSize(int x,int y)
    {
        mBase.SetSize(x,y);
    }
    virtual void Visible(bool v)
    {
        mBase.Visible(v);
    }
    virtual void Click(int x,int y)
    {
        mBase.Visible(v);
    }
};

现在您的 TouchButton 只需传递对象并覆盖适当的成员:

class TouchButton : IButtonForwarder
{
 public:
    TouchButton(IButton& Base)
        : IButtonForwarder(Base)
    {};
    virtual void Click(int x,int y)
    {
      // override
    }
};