2010-12-19 8 views
1

QToolBar 하위 클래스를 구현하려고합니다. 개별적으로 추가하는 대신 모델에 의해 지정된 항목이 있습니다. 즉, addAction과 같은 항목 (툴바 버튼)을 추가/제거하는 함수를 공개적으로 액세스 할 수 없도록 선택해야합니다.C++ 상속 및 원하지 않는 상속 함수 숨기기

이 개체에서 상속하는 가장 좋은 방법은 무엇입니까?

나의 현재 최고의 아이디어는 다음과 같이 할 수 있습니다 :

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] 

}; 

그래서, 비공개로 공개 안 모든 기능을 재정의.

이것은 좋은 생각입니까 아니면 더 좋은 방법이 있습니까?

답변

10

QToolBar에서 공개적으로 상속하는 경우 클라이언트 코드로 개체를 처리하고 예 : addAction 멤버 함수를 호출 할 수 있습니다. 공개적으로 당신이 (using 선언과 함께 예를 들어)에 노출하고자하는 기능 노출

  • 상속을 개인적으로 QToolBar
  • 에서 :이 기능에 액세스 할 수 있는지 확인하려면이에게 다른 방법을해야합니다

당신이 당신의 초기 솔루션을 고수하고 QToolbar에서 공개적으로 상속 할 경우

  • 하는가 수 이 기본 클래스의 기능을 보장하지 않습니다 도자기 당신은 기본 클래스 기능의 접근성을 변경 using 선언을 사용하는 대신에 당신은 공개적으로 QToolbar에서 상속하는 그들에게
+2

+1으로 시작해야합니다. 완료된 유일한 대답 인 경우. 'private' 상속 * 및 *'using' 선언을 사용하여 비공개 함수를 노출합니다. – rubenvb

2

아마 당신은 접근 QToolBar 모두가 당신의 ToolbarView 민간 접근 할 것이다, 이런 경우이

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

생각할 수있다.

1

을 숨기고 고려해야한다

  • 를 호출되지 않습니다. 어떻게 그것을 상속에 private로 변경하십시오. 즉, 클래스 정의는

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