You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何隐藏MySuperButton对Button的继承,同时保留Widget的公开访问?

问题:隐藏中间基类继承关系同时保留顶层基类可见性

现有如下类层次结构:

class Widget {
    // 大量虚成员
};

class Button : public Widget {
    // 新增内容及重写
};

class MySuperButton : public Button {
    // ...
};

我希望隐藏MySuperButton继承自Button的事实,但保留其继承自Widget的公开可见性——也就是让MySuperButton对Button的继承为私有,同时保持Button的基类Widget为公开访问。

需求原因

我基于Button构建了一个复杂部件,需要维护按钮状态的不变性。如果暴露它的Button类型,外部可能直接修改按钮状态,破坏这些不变性。
示例:

MySuperButton button;
button.setText("Click me!"); // 调用Button::setText
// 糟糕,MySuperButton设置的特殊文本被覆盖了 =(

已尝试但无效的方案

  • 将MySuperButton私有继承Button会同时隐藏Widget,导致无法对该按钮执行Widget相关操作。
  • 使用访问说明符无法阻止MySuperButton转换为Button类型,例如void doButtonStuff(Button& b);仍会接受MySuperButton&。
  • 使用组合方式需重新实现大量Button已有的逻辑并转发,操作繁琐,尤其实际类层次较深且类规模较大。
  • 虚继承无法生效,基类不可见(不确定原因)。

由于Button和Widget来自外部库(Qt),我无法修改它们。实际代码更复杂,上述层次仅为示例。请问是否有可行方案,还是只能接受部件可能因操作不慎被破坏?

内容的提问来源于stack exchange,提问作者gan_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 22:15:38