C++ C++;继承,并隐藏不需要的继承函数
我试图实现一个子类,它的项由模型指定,而不是单独添加。这意味着添加/删除项目(工具栏按钮)的功能选择,如addAction,不应公开访问 从这个对象继承,但选择私有函数的最佳方式是什么 我目前的最佳想法是这样做:C++ C++;继承,并隐藏不需要的继承函数,c++,inheritance,C++,Inheritance,我试图实现一个子类,它的项由模型指定,而不是单独添加。这意味着添加/删除项目(工具栏按钮)的功能选择,如addAction,不应公开访问 从这个对象继承,但选择私有函数的最佳方式是什么 我目前的最佳想法是这样做: class ToolbarView : public QToolBar { Q_OBJECT public: explicit ToolbarView(QWidget *parent = 0); signals: public slots: private:
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
公开继承:
- 请注意,它不能保证基类函数不会被调用
QToolBar
公开继承,就可以让客户端代码将您的对象视为一个对象,并调用addAction
成员函数等。如果要确保这些函数不可访问,则必须以另一种方式执行:
- 从
QToolBar
- 公开公开您希望公开的函数(例如使用
声明)
QToolbar
公开继承:
- 请注意,它不能保证基类函数不会被调用
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:这是唯一完整的答案<代码>私有继承和使用
声明公开非私有函数。