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
}
};
在 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
}
};