【发布时间】:2011-05-07 16:31:43
【问题描述】:
我似乎总是在决定一个类中的值应该是 static 和 const 应该是公共的还是私有的,并使用静态公共方法进行访问。
class DeepThought
{
public:
static const int TheAnswer = 42;
};
对比:
class DeepThought
{
public:
static int GetTheAnswer() { return TheAnswer; }
private:
static const int TheAnswer = 42;
};
我想要以第一种方式进行,但在我内心深处的某个地方感觉它破坏了封装,即使它是一个恒定值。第二种方式似乎并没有真正向表中添加任何内容,并且不必要地使代码混乱。
所以我问,这两种选择有什么根本错误吗?如果有,是什么?
【问题讨论】:
-
我实际上从来没有,曾经需要在实际代码中做任何事情。你有这方面的真实用例吗?
-
@unapersson:你从未有过与类关联的常量吗?
-
想想 C# 是如何做到的,任何常量原始类型也都是隐式静态的。它们总是出现,让您可以轻松地将可能是全局常量的内容关联起来,但不是全局的,而是将其与逻辑上属于的类关联。
-
@oli 是的,但不是静态的。
-
真正的问题是你为什么要公开变量(即使通过吸气剂)。是否破坏封装的答案真的取决于值的含义。
标签: c++ encapsulation