2010-09-30 92 views
-2

我有一個需要開發的程序。爲了保密,我會使用模糊的術語。我有一個包含由幾個不同類共享的成員的小部件。我會在兩個階段處理一個小部件。每個階段都有不同的成員,但他們確實也有一些成員。這是結構圖。繼承或組成?

  Widget() 
    |-    -| 

SWidget()PWidget()

| - |

階段1()階段2()

Swidget和Pwidget從窗口小部件

Swidget繼承包含2個pwidgets

stage1和stage2從Swidget繼承。

我有一個類,需要實現兩種stage1或stage2的

如果我宣佈變量作爲Swidget我只能看到什麼是常見的。我看不到stage1或stage2特有的內容。我該如何解決這個問題?繼承對一切都有效,但它們的區別。請指教!

編輯用戶張貼的 「答案」:

stage1和stage2幾乎完全一樣。他們與一些成員和一些方法不同。問題是我無法在基類中創建屬性來設置特定子類中的屬性。在我知道其特定成員的值之前,stage1/stage2類被實例化。因此,如果我在UI中聲明基類的實例,我無法設置它們。基類對子類一無所知。但是,爲了讓所有的屬性和方法都可以通過UI訪問,我必須聲明其中的一個,並使用我需要的一個。

+2

您的格式需要修正。如果這是作業,請將其標記爲有作業。 「爲了保密,我會用模糊的術語」通常意味着這是作業。 – 2010-09-30 19:19:07

+0

作文在哪裏?更不用說:Stage1和Stage1在他們所做的事情上有多相似,特別是他們將從外部調用的方法?你的班級如何知道是否實施Stage1或Stage2,並且它是否做了不同的事情?你在看什麼語言? – 2010-09-30 20:21:49

+1

由於現在還沒有足夠的信息來回答這個問題,我正在投票結束。 – 2010-09-30 20:56:17

回答

1

我相信你所尋找的是這樣的:

class Stage 
{ 
    //shared members 
} 

class Stage1: Stage 
{ 
    //unique members 
} 

class Stage2: Stage 
{ 
    //unique members 
} 

class SWidget: Widget 
{ 
    Stage currentStage; 
} 

據我所知,您遇到的is-a or has-a困境。使用上面的設計,您可以將Stage1或Stage2作爲currentStage裝箱。然後根據需要投射該財產以訪問唯一成員。

現在是否這是做事的最佳方式取決於您的具體需求。

+1

請注意,在C++中,您需要'Stage * currentStage;'或'shared_ptr currentStage;'或其他聲明。 – 2010-09-30 20:22:57

0

Stage1和Stage2幾乎完全相同。他們與一些成員和一些方法不同。問題是我無法在基類中創建屬性來設置特定子類中的屬性。在我知道其特定成員的值之前,stage1/stage2類被實例化。因此,如果我在UI中聲明基類的實例,我無法設置它們。基類對子類一無所知。但是,爲了讓所有的屬性和方法都可以通過UI訪問,我必須聲明其中的一個,並使用我需要的一個。