2009-11-11 51 views
1

我有一個只包含靜態數據成員的C++類。 我注意到編譯器是好的,如果我將訪問方法定義爲const,如靜態或「常規」 - 所有似乎都工作。如何定義操作靜態數據成員的C++方法?

我的問題是在這種情況下正確/更好的做法是什麼?

謝謝!

回答

2

靜態數據成員的靜態訪問器。

+0

我的編譯器似乎不允許有靜態和常量的方法。我相信,一旦一個方法被定義爲static,那麼通過設計它就不能修改類的非靜態成員 - 因爲這個方法不屬於該類的特定實例。 – Mym 2009-11-11 06:55:45

+0

你說得對,我的錯。 – 2009-11-11 07:01:51

+0

謝謝。這對我有意義。 – Mym 2009-11-11 07:03:53

2

如果您的課程只包含靜態成員,則應該使用singleton pattern

+0

我同意,這樣的班級實際上是一個單身人士。 但是,如果我保持這種狀況,會出現什麼問題? – Mym 2009-11-11 06:58:07

+1

但是...要小心。單例模式經常被濫用。 – rlbond 2009-11-11 06:59:27

+0

其實,很少有「真實」的情況下,你需要單身模式,我相信只有靜態功能的類完全沒問題。 – 2009-11-11 07:01:15

0

如果所有方法都是靜態的,那麼創建類的實例就沒有意義了。所以我建議讓所有的方法都是靜態的,這樣你就可以在不創建類的對象的情況下使用這些方法。基本上,您將能夠使用命名空間語法來調用這些方法。

+0

確實如此,調用代碼可以創建類的實例(沒有懲罰,空c'tor,沒有非靜態數據成員),或者直接訪問靜態方法而不創建實例。 – Mym 2009-11-11 07:06:20

+0

是的..但直接創建一個對象看起來有點奇怪的所有靜態變量類。 – Naveen 2009-11-11 07:12:17

+0

@Mym:如果類不打算實例化,則應該隱藏構造函數。你的界面應該只提供那些對你的設計有意義的操作。如果只有靜態數據和方法,構造函數應該是私有的(並且未實現)。 – 2009-11-11 07:14:25

2

我有一個只包含靜態數據成員的C++類。

然後,這可能不應該是一個類,但要麼在名稱空間或單身的免費功能。

+0

我仍然覺得它更容易封裝在一個指定的類,因爲它有一個特定的角色,我有很多操作這些靜態數據成員(三個不同的地圖)的方法。 – Mym 2009-11-11 06:59:27

+0

+1 concur!你只需要一個頭文件來聲明一些函數。這些函數會改變你想要的任何靜態存儲變量。無需在課堂上申報,並使其他翻譯單位依賴於此類別聲明。 – sellibitze 2009-11-11 08:09:36

+1

因此,翻譯單元應該是您的「抽象」(不是類),並且頭文件將是不包含任何實現細節的接口。 – sellibitze 2009-11-11 08:11:35