gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:19:29 25 4
gpt4 key购买 nike

在c# winform 中,我们可以创建一个覆盖基类某些功能的对象,而无需了解基类的实现。例如,我们创建 TouchButton : Button 然后仅覆盖 WndProc 函数,并且 Button 的实现对我们不可见。在 C++ 中,我有一个接口(interface),例如包含所有虚拟方法的 IButton 类。在我的 dll 实现中,它将返回 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++ - c# 在 C++ 中重写的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29566059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com