C++继承,并隐藏不需要的继承函数

qtg*_*irl 1 c++ inheritance

我正在尝试实现一个QToolBar子类,它的项目由模型指定,而不是单独添加.这意味着选择添加/删除项目(工具栏按钮)的功能,例如addAction不应公开访问.

从这个对象继承的最佳方法是什么,但是选择私有函数?

我目前最好的想法是这样做:

class ToolbarView : public QToolBar
{
    Q_OBJECT
public:
    explicit ToolbarView(QWidget *parent = 0);

signals:

public slots:

private:

    void addAction (QAction *action) {Q_UNUSED(action)};
    QAction* addAction (const QString &text) {return QToolBar::addAction(text) ;}
    ...
    QAction* addSeparator() {QToolBar::addSeparator();}
    ... [list of about 10 of these]

};
Run Code Online (Sandbox Code Playgroud)

因此,将所有不应公开的功能重新定义为私有.

这是一个好主意,还是有更好的方法?

ice*_*ime 10

只要您公开继承QToolBar,您就可以使客户端代码将对象视为对象,并调用例如addAction成员函数.如果您想确保这些功能无法访问,您将以另一种方式执行此操作:

  • 私下继承 QToolBar
  • 公开公开您希望公开的函数(例如using声明)

如果您想坚持使用初始解决方案并公开继承QToolbar:

  • 请注意,它不保证不会调用基类函数
  • 您应该考虑使用using声明来更改基类函数的可访问性,而不是隐藏它们

  • +1:是唯一完整的答案.`private` inheritance*和*`using`声明来公开非私有函数. (2认同)