类不应既有 public 数据成员又有 private 数据成员
5.1.3 ID_mixPublicPrivateData
类的设计应遵循:
- 成员之间没有依赖关系,且都可以随意被读写时,则都应声明为 public
- 成员之间有依赖关系,或成员的状态会影响到整个对象的状态时,则都应声明为 private
否则应对类进行改造或拆分。
面向对象的封装理念更倾向于将所有数据成员都设为 private,由成员函数按指定逻辑控制每个成员的读写方法,以供外部访问,对代码的职责进行有效地划分,从而提高可维护性并降低风险,关于封装的进一步讨论可参见 ID_nonPrivateData。
常量数据成员不可被改变,所以可不受本规则约束。
示例:
class A { // Non-compliant
public:
int n;
....
private:
int d;
};
应改为:
class A { // Compliant
public:
int method_for_n();
....
private:
int n, d;
};