Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;继承,并隐藏不需要的继承函数_C++_Inheritance - Fatal编程技术网

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

C++ C++;继承,并隐藏不需要的继承函数,c++,inheritance,C++,Inheritance,我试图实现一个子类,它的项由模型指定,而不是单独添加。这意味着添加/删除项目(工具栏按钮)的功能选择,如addAction,不应公开访问 从这个对象继承,但选择私有函数的最佳方式是什么 我目前的最佳想法是这样做: class ToolbarView : public QToolBar { Q_OBJECT public: explicit ToolbarView(QWidget *parent = 0); signals: public slots: private:

我试图实现一个子类,它的项由模型指定,而不是单独添加。这意味着添加/删除项目(工具栏按钮)的功能选择,如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]

};
因此,将所有不应该是公共的功能重新定义为私有的


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

也许你能想到这个

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

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

也许您可以想到这一点

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

在这种情况下,所有可访问的QToolBar将在您的Toolbar视图中具有私有访问权限。

只要您从
QToolBar
公开继承,您就可以让客户端代码将您的对象视为私有对象,并调用例如
addAction
成员函数。如果要确保这些函数不可访问,则必须以另一种方式执行:

  • QToolBar
  • 公开公开您希望公开的函数(例如使用
    声明)
如果您想坚持最初的解决方案并从
QToolbar
公开继承:

  • 请注意,它不能保证基类函数不会被调用
  • 您应该考虑使用<代码>使用< /Cord>声明来更改基类函数的可访问性,而不是隐藏它们
只要您从
QToolBar
公开继承,就可以让客户端代码将您的对象视为一个对象,并调用
addAction
成员函数等。如果要确保这些函数不可访问,则必须以另一种方式执行:

  • QToolBar
  • 公开公开您希望公开的函数(例如使用
    声明)
如果您想坚持最初的解决方案并从
QToolbar
公开继承:

  • 请注意,它不能保证基类函数不会被调用
  • 您应该考虑使用<代码>使用< /Cord>声明来更改基类函数的可访问性,而不是隐藏它们
您公开继承自
QToolbar
。将其更改为
private
继承怎么样。也就是说,类定义应该以

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

您公开继承自
QToolbar
。将其更改为
private
继承怎么样。也就是说,类定义应该以

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

+1:因为这是唯一完整的答案<代码>私有
继承和
使用
声明来公开非私有函数。+1:这是唯一完整的答案<代码>私有
继承和
使用
声明公开非私有函数。