2017-02-25 164 views
-1

我聽說過關於類,但在課外的函數。我的意思是,這些對於類的實現是有用的,因爲它使用它,但它不在類體中,它在外面,在任何地方都沒有。 所以,我想知道,寫一個免費函數而不是隻寫一個成員函數有什麼意義?什麼是免費功能?

感謝您的回答。

+0

應該說,'std :: malloc'是你想象中的更好的並行宇宙中的一員,以及如何改進軟件設計? –

回答

5

免費功能提供更好的解耦和界面清晰度。當大多數算法邏輯都由自由函數提供時,您的數據結構需要有明確的目的和適當的接口。其結果是代碼可以最小化耦合,這是更容易推理,測試和依賴。通常,數據結構應儘可能小和儘可能大以滿足一個單一的,特定的目的;數據結構應該通過合成來組合,並且邏輯應該由儘可能訪問數據的公共接口的免費函數提供。

成員函數可能是方便,當然它需要有一些成員功能,提供上述接口,但它是一個大滑坡,並做了錯誤的,當你結束了類似std::string

+0

我不明白你的消息的最後部分:o – FeelZoR

+2

@FeelZoR'std :: string'是關於它的最終界面和避免狀態混亂的殭屍啓示錄。 –

+0

這是否意味着我們應該避免它,並喜歡一個字符數組? – FeelZoR

2

如果函數不需要保持狀態,那麼沒有理由使它成爲類的一部分。 考慮

int add(int a, int b) { return a + b; } 

功能確實對自己的工作很好,它不需要一個類的對象。

+0

嗯,好的,謝謝,我看到^^ – FeelZoR