C++ 类访问说明符详细程度

标签 c++ class coding-style access-specifier

“传统的”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”对的仅 header 模板代码时,我发现这一点尤其正确。在那种情况下,函数实现的规模压倒了这一小而重要的信息。


我的问题很简单,源于我从未见过其他人在他们的 C++ 代码中主动这样做的事实。

假设我没有支持“类 View ”的 IDE,使用这种冗长级别是否有任何明显的缺点?

欢迎任何其他样式推荐!

最佳答案

“身在罗马,入乡随俗。”

我在 Java 上花了很多时间,喜欢为每个字段和方法分别指定访问说明符的风格。但是,当我使用 C++ 进行编程时,我总是使用您的第一个代码片段中显示的样式。

关于C++ 类访问说明符详细程度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2616155/

相关文章:

c++ - enable_if 可以用作非额外参数(例如,用于构造函数)吗?

c++ - 在 [a,b] 间隔之间找到相同的数字

c# - 如何使用控件的类名或其值而不是 ID 来调用 HTML 按钮的单击函数?

python - 类 block 中定义的名称范围不会扩展到方法 block 。这是为什么?

objective-c - 您对 Objective-C 中的返回类型有多谨慎?

c++ - 开发 C++ "to_string is not a member of std"错误

c++ - 在 C++ 源代码树中包含 R 独立库

加载程序集后执行的 C# 方法

performance - Erlang : match on two different lines, 和元组匹配哪个效率更高?

scala - Scala 方法 def 什么时候应该使用显式定义的返回类型?