Oop 最佳实践:在类定义中对公共/受保护/私有进行排序?
我正在从头开始一个新项目,希望它干净/有良好的编码标准。这里经验丰富的开发人员喜欢按什么顺序在类中布局 答:1)公共方法2)私有方法3)公共变量4)私有变量 B:1)公共变量2)私有变量3)公共方法4)私有方法 C:1)公共变量2)公共方法3)私有方法4)私有变量 我通常喜欢将公共静态变量放在顶部,但是,公共静态方法是在构造函数之前列出的,还是应该始终首先列出构造函数?诸如此类的事情 我知道这是芬尼基,但我只是想知道:这方面的最佳实践是什么Oop 最佳实践:在类定义中对公共/受保护/私有进行排序?,oop,coding-style,class-design,Oop,Coding Style,Class Design,我正在从头开始一个新项目,希望它干净/有良好的编码标准。这里经验丰富的开发人员喜欢按什么顺序在类中布局 答:1)公共方法2)私有方法3)公共变量4)私有变量 B:1)公共变量2)私有变量3)公共方法4)私有方法 C:1)公共变量2)公共方法3)私有方法4)私有变量 我通常喜欢将公共静态变量放在顶部,但是,公共静态方法是在构造函数之前列出的,还是应该始终首先列出构造函数?诸如此类的事情 我知道这是芬尼基,但我只是想知道:这方面的最佳实践是什么 PS:不,我不使用Cc。我知道。我是一个勒德分子。就我
PS:不,我不使用Cc。我知道。我是一个勒德分子。就我个人而言,我喜欢把公共放在最上面,受保护,然后是私人。原因是当有人打开标题时,他/她首先看到他/她可以访问的内容,然后在向下滚动时看到更多细节
使用类时不必查看类的实现细节,那么类的设计就做得不好。个人而言,我喜欢将public放在顶部,受保护,然后是private。原因是当有人打开标题时,他/她首先看到他/她可以访问的内容,然后在向下滚动时看到更多细节
使用类不必查看类的实现细节,那么类的设计就做得不好。最佳实践是保持一致性 就我个人而言,我更喜欢先使用
public
方法,然后是protected
方法,然后是private
方法。成员数据通常应该是私有的或受保护的,除非您有充分的理由不这样做
我之所以将public
方法放在顶部,是因为它为类定义了接口,所以任何阅读头文件的人都应该能够立即看到这些信息
一般来说,
private
和protected
成员对于大多数查看头文件的人来说不太重要,除非他们考虑修改类的内部结构。让它们“远离”可确保仅在需要知道的基础上维护此信息,这是封装的一个更重要方面。最佳做法是保持一致
就我个人而言,我更喜欢先使用public
方法,然后是protected
方法,然后是private
方法。成员数据通常应该是私有的或受保护的,除非您有充分的理由不这样做
我之所以将public
方法放在顶部,是因为它为类定义了接口,所以任何阅读头文件的人都应该能够立即看到这些信息
一般来说,
private
和protected
成员对于大多数查看头文件的人来说不太重要,除非他们考虑修改类的内部结构。让它们“远离”可确保仅在需要知道的基础上维护此信息,这是封装的一个更重要方面。这将是我的订购
- 先静后静
- 先公后私
其思想是在行为(方法)之前定义对象(数据)。静态需要分开,因为它们实际上不是对象的一部分,也不是对象的行为。这将是我的排序
- 先静后静
- 先公后私
其思想是在行为(方法)之前定义对象(数据)。静态需要分开,因为它们实际上不是对象的一部分,也不是对象的行为。在中,Robert C.Martin建议程序员始终将成员变量放在类的顶部(先是常量,然后是私有成员)方法的顺序应该是这样的,这样它们读起来就像一个故事,而不会导致读者需要过多地跳转代码。这是一种更合理的组织代码的方法,而不是通过访问修饰符。在中,Robert C.Martin建议程序员始终将成员变量放在类的顶部(先是常量,然后是私有成员)方法的顺序应该是这样的,这样它们读起来就像一个故事,而不会导致读者需要过多地跳转代码。这是一种更合理的组织代码的方法,而不是通过访问修饰符。我认为我在这方面的理念与大多数人不同。我更喜欢把相关的项目组合在一起。我不能忍受和同学们一起跳来跳去。代码应该是流动的,基于可访问性(公共、私有、受保护等)或实例与静态、成员与属性与函数的人为排序无助于保持良好的流动。因此,如果我创建了一个由私有hel实现的公共方法
方法
class MyClass {
public string Method(int a) {
return HelperMethodA(a) + HelperMethodB(this.SomeStringMember);
}
string HelperMethodA(int a) { // returns some string }
string HelperMethodB(string s) { // returns some string }
public bool Equals(MyClass other) { return MyClass.Equals(this, other); }
public static bool Equals(MyClass left, MyClass right) { // return some bool }
public double SomeCalculation(double x, double y) {
if(x < 0) throw new ArgumentOutOfRangeException("x");
return DoSomeCalculation(x, y);
}
const double aConstant;
const double anotherConstant;
double DoSomeCalculation(double x, double y) {
return Math.Pow(aConstant, x) * Math.Sin(y)
+ this.SomeDoubleMember * anotherConstant;
}
}
#ifndef TEMPLATE_H
#define TEMPLATE_H
class ClassName
{
Q_OBJECT
Q_PROPERTY(qreal startValue READ startValue WRITE setStartValue)
Q_ENUMS(MyEnum)
public:
enum MyEnum {
Hello = 0x0,
World = 0x1
};
// constructors
explicit ClassName(QObject *parent = Q_NULLPTR);
~ClassName();
// getter and setters of member variables
// public functions (normal & virtual) -> orderby logic
public slots:
signals:
protected:
// protected functions it's rule followed like public functions
private slots:
private:
// methods
// members
};
#endif // TEMPLATE_H