簡體   English   中英

C ++中沒有數據成員的類

[英]Class with no data members in C++

這可能不是C ++特有的問題,更多的是面向對象編程。 我是新手,我對我的設計表示懷疑。 我有一個類Parser ,它基本上實現了許多處理解析表達式的函數,從中綴到后綴的轉換等。我在main函數中使用了這些Parser函數。 我意識到我不需要這個類的任何數據成員。 因此,我真的不需要這個類的對象。 因此,我最終在課堂上將每個函數都設置為靜態。 這個設計有什么奇怪的嗎? 我應該將其作為界面嗎? 有什么建議?

  1. 你需要一個解析器,你知道你希望它為你做什么 - 這實際上就是你的“界面”。

  2. 當前的解析器實現不需要任何成員變量 - 因此,要實現您的接口,您不需要類。 所以,是的,廢除你的靜態方法。 像凱文所說,使用具有普通舊函數(非靜態)的命名空間是一個好主意。

  3. 如果您覺得需要添加一個需要維護內部狀態的新解析器,那么您可能希望在(1)中定義一個接口 - 一個普通的公開可見的頭文件,在您選擇的命名空間內具有函數聲明就足夠了。

一個只有靜態函數的類似乎與命名空間無法區分。 那么,為什么不使用命名空間呢?

決定這個問題的方法是如何使用這些功能?

1)如果所有函數都在一個文件中使用而不需要在任何地方導出,那么一定要使用靜態函數。 為什么? 因為您可以直接在.cpp文件中將它們直接輸入到類的主體中,而您不必擔心維護聲明並保持參數對齊。 因為當解析C ++類時,會跳過在類體內定義的每個函數內的所有代碼,然后在聲明了所有類成員之后對其進行解析,因此這些函數都可以看到彼此並且處於更好的名稱狀態。編譯器如果你直接在類中聲明它們,也會內聯很多較小的函數。

2)如果需要從當前.cpp文件外部使用這些函數,則使用普通函數。 因為以后它們可以在其他任何地方使用,並且通過名稱導出它們更容易。

將實用程序函數設置為靜態是很常見的,因此,如果您的Parser類的功能不相互依賴,那么您完全可以將它們設置為靜態。 如果它們相互依賴,並且可能以相反的方式完成相同的功能,則應考慮使用接口

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM