2012-03-21 43 views
0

我想知道如果任何人有一個設計,可以幫助我從GUI界面編輯嵌套的對象。會員訪問設計(訪問會員)

可以說我有兩個班

class ObjectA 
{ 
    public: 
     ObjectA() 
     ~ObjectA() 

     unsigned GetParam(); 
     void SetParam(unsigned Param) 

    private: 
     unsigned Param; 
}; 

class ObjectB 
{ 
    public: 
     ObjectB() 
     ~ObjectB() 

     ObjectA GetObjectA(); 
     void SetObjectA(ObjectA ObjA) 

    private: 
     ObjectA ObjA; 
}; 

現在假設我有訪問對象B,但我真的需要從GUI設置帕拉姆。有兩種方法我可以看到這樣做。

  1. 使用存取函數編輯的對象

    ObjectA ObjA = ObjB.GetObjectA(); 
    ObjA.SetParam(100); 
    ObjB.SetObjectA(ObjA); 
    
  2. 添加一個公共接口對象B

    void ObjectB::SetParam(unsigned Param) 
    { 
        ObjA.SetParam(Param); 
    } 
    

我真的,因爲它們涉及不喜歡這些解決方案很多代碼編寫都會訪問對象參數,並且不能很好地擴展。有什麼建議麼?

+2

如果您返回對象作爲替代參考,那麼您可以使用'ObjB.GetObjectA()。SetParam(100);'。 – 2012-03-21 04:18:05

回答

0

我的建議是將objA作爲一個指針而不是一個對象本身,因爲它會更容易避免處理複製構造函數,而且如果ObjectA中有更多的函數,那麼您可能需要在類ObjectB中具有相同的函數例如:像SetParam,您可能需要實現GetParam ..

函數是各個類的責任而不是容器類的責任。

class ObjectA 
{ 
    public: 
     ObjectA() 
     ~ObjectA() 

     unsigned GetParam(); 
     void SetParam(unsigned Param) 

    private: 
     unsigned Param; 
}; 

class ObjectB 
{ 
    public: 
     ObjectB() 
     ~ObjectB() 

     ObjectA* GetObjectA(); 
     void SetObjectA(ObjectA *ObjA) 

    private: 
     ObjectA *ObjA; 
}; 



ObjectA *ObjA = ObjB.GetObjectA(); 
ObjA->SetParam(100); 
+0

如果您只是想通過'public'方法公開它,那麼製作'ObjA','private'有什麼意圖?這與保持「公開」一樣好。 – 2012-03-21 04:24:50

+0

公開允許你刪除,新的沒有任何限制。使它保持私有狀態允許對容器類在其生命週期方面進行某種程度的控制 – Jeeva 2012-03-21 04:27:28

+0

我同意你的解決方案很好地處理複製構造函數問題。讓我感到害怕的是,任何使用我的課程的人現在都可以訪問非常量數據,這些數據可以在我班級不知情的情況下進行更改。 我想一直希望有一個設計模式,我不知道人們用它來訪問編輯器中的數據。也許一廂情願。 – MSTEVENS 2012-03-21 14:41:50