Tom*_*ert 59 c++ code-formatting
拥有所有私人成员,然后是所有受保护的成员,然后是所有公共成员?或者相反?或者是否应该有多个私有,受保护和公共标签,以便操作可以与构造函数分开等等?做出此决定时,我应该考虑哪些问题?
its*_*att 50
我把公共接口放在首位,但我并不总是这样做.我常常向后做这件事,私有,然后保护,然后公开.回想起来,它没有多大意义.
作为一个班级的开发者,你可能很熟悉它的"内脏",但是班级的用户并不在乎,或者至少他们不应该这么做.他们最感兴趣的是班级可以为他们做些什么,对吧?
所以我把公众放在第一位,并通常通过功能/实用程序来组织它.我不希望他们不得不通过我的界面来找到与X相关的所有方法,我希望他们能够以有条理的方式看到所有这些东西.
我从不使用多个公共/受保护/私人部分 - 在我看来太混乱了.
Jos*_*ley 37
Google赞成此订单:"Typedef和Enums,常量,构造函数,析构函数,方法,包括静态方法,数据成员,包括静态数据成员."
Matthew Wilson(需要Safari订阅)推荐以下顺序:"构造,操作,属性,迭代,状态,实现,成员和我最喜欢的,不实现."
它们提供了很好的理由,这种方法似乎是相当标准的,但无论你做什么,都要保持一致.
编码风格是令人惊讶的激烈对话的来源,考虑到这一点,我冒着提供不同意见的风险:
代码应该写成对人类最易读。我完全同意这里多次给出的声明。
偏差是我们采取的滚动方式。
为了帮助类的用户了解如何使用它,应该编写和维护适当的文档。用户永远不需要阅读源代码即可使用该类。如果这样做(手动或使用源内文档工具),那么公共和私有类成员在源中定义的顺序对用户来说无关紧要。
然而,对于需要理解代码的人来说,在代码审查、拉取请求或维护期间,顺序很重要——规则很简单:
项目应该在使用之前定义
这既不是编译器规则,也不是严格的公共与私有规则,而是常识 - 人类可读性规则。我们按顺序阅读代码,如果我们每次看到使用的类成员都需要来回“玩弄”,但不知道它的类型,例如,它会对代码的可读性产生不利影响。
严格区分 private 和 public 违反了这条规则,因为私有类成员在任何公共方法中使用后都会出现。
与往常一样,请首先为人类编写代码。考虑将要使用您的班级的人,并将最重要的成员/枚举/ typedefs /任何对他们来说放在顶部。
通常,这意味着公众成员是最重要的,因为这是您班上大多数消费者最感兴趣的部分。其次是私有,然后是受保护的。通常。
有一些例外。
有时,初始化顺序很重要,有时需要在公众面前声明私有。有时,继承和扩展一个类更为重要,在这种情况下,受保护的成员可能会放在更高的位置。而且,当黑客对遗留代码进行单元测试时,有时公开公共方法会更容易-如果我不得不犯下这句话,我会将其放在类定义的底部。
但是它们是相对罕见的情况。
我发现大多数时候,“公共的,受保护的,私人的”对您所在类别的消费者最有用。这是一个不错的基本规则。
但这与按访问顺序排序无关,而更多地是根据消费者的兴趣进行排序。