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

时间:2010-12-19 18:53:43

标签: 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]

};

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

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

3 个答案:

答案 0 :(得分:10)

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

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

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

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

答案 1 :(得分:2)

也许你能想到这个

class ToolbarView : private QToolBar
{
    //...
}

在这种情况下,所有可访问的QToolBar都将在您的工具栏视图中进行私人访问。

答案 2 :(得分:1)

您公开继承自QToolbar。如何将其更改为private继承。那个,类定义应该以

开头
    class ToolbarView : private QToolBar 
    {
    // good only if you want to 
    // make "most" of the public members of QToolBar private in ToolbarView
    }