一千萬個為什麽

搜索

C ++類訪問說明符詳細程度

“傳統的”C ++類(只是一些隨機聲明)可能類似於以下內容:

class Foo
{
public:
  Foo();
  explicit Foo(const std::string&);
  ~Foo();

  enum FooState
  {
    Idle, Busy, Unknown
  };

  FooState GetState() const;
  bool GetBar() const;
  void SetBaz(int);

private:
  struct FooPartialImpl;

  void HelperFunction1();
  void HelperFunction2();
  void HelperFunction3();

  FooPartialImpl* m_impl;//smart ptr
  FooState m_state;
  bool m_bar;
  int m_baz;
};

如果原始程序員沒有整齊地組織他的“訪問區域”,我總是發現這種類型的訪問級別規範很難並且難以遵循。


看一下Java/C#風格的相同代碼片段,我們得到:

class Foo
{
  public: Foo();
  public: explicit Foo(const std::string&);
  public: ~Foo();

  public: enum FooState
  {
    Idle, Busy, Unknown
  };

  public: FooState GetState() const;
  public: bool GetBar() const;
  public: void SetBaz(int);

  private: struct FooPartialImpl;

  private: void HelperFunction1();
  private: void HelperFunction2();
  private: void HelperFunction3();

  private: FooPartialImpl* m_impl;//smart ptr
  private: FooState m_state;
  private: bool m_bar;
  private: int m_baz;
};

在我看來,這更容易在標題中讀取,因為訪問說明符就在目標旁邊,而不是一堆線。我發現在使用未與通常的“* .hpp/* .inl”對分開的僅標題模板代碼時尤其如此。在那種情況下,函數實現的大小壓倒了這個小而重要的信息。


我的問題很簡單,源於這樣一個事實:我從未見過其他人在他們的C ++代碼中積極地做到這一點。

假設我沒有“Class View”功能的IDE,那麽使用這種級別的冗余會有明顯的缺點嗎?

歡迎任何其他風格的建議!

最佳答案

“在羅馬時,像羅馬人那樣做。”

我花了很多時間使用Java,就像分別為每個字段和方法指定訪問說明符的樣式一樣。但是,當我使用C ++編程時,我總是使用第一個代碼片段中顯示的樣式。

轉載註明原文: C ++類訪問說明符詳細程度