2014-07-09 66 views
2

我想弄清楚什麼時候是最好的時候使用成員函數(靜態),以及何時在.cpp文件中添加一個輔助方法。當一個功能需要成爲一個成員函數

假設在類MyClass中,我想將TypeA轉換爲typeB。 這是一個漫長的過程,所以我將添加一個方法來處理轉換。

該方法是純功能性的,並且與MyClass實例的狀態無關。 它獲取一個輸入併產生輸出,而不使用MyClass的任何成員(私有或公共)。

只有MyClass會使用這種方法。

現在,我不知道這種方法是如何需要定義:

  1. 在MyClass的靜態函數
  2. 在這個功能的專用類的靜態功能。
  3. 幫助方法不是任何類的成員,只在cpp文件中定義。
+0

如果它在概念上只與'MyClass'耦合,那麼它應該被創建爲一個私有靜態並且在'MyClass'命名空間中引入int。 – StoryTeller

+0

只要有可能,並且此函數的使用僅限於'MyClass',我會選擇3.(在一個未命名的名稱空間中)。 –

+0

像這樣的一個「實用工具」功能,我做#3(在未命名的命名空間中),也許爲了避免重新編譯,如果在頭文件中使用靜態函數。但在1和3之間並不重要。 –

回答

3

3.Help方法不是任何類的成員,只在cpp文件中定義。

所以,你可以改變,如果你需要的輔助方法的定義,而不用擔心MyClass的客戶在使其成爲一個靜態成員函數的情況下,重新編譯。

編輯: 正如@πάνταῥεῖ說,你可以把輔助方法,在不具名命名空間限制MyClass CPP文件(和翻譯單位,其中包括它)內的使用情況。

+1

未命名的命名空間是爲了避免文件之間的名稱衝突。它不限制只使用一個類。 –

+0

@NeilKirk是的,如果包含cpp文件。這個技巧部分依賴於編程約定。 – songyuanyao

+0

我不明白。 –

3

如您所說,「只有MyClass將使用此方法」,則它在邏輯上屬於MyClass作爲靜態成員函數。

+1

或作爲唯一源文件中的本地函數使用。 –

相關問題