如何定义操作静态数据成员的C++方法?

问题描述:

我有一个只包含静态数据成员的C++类。 我注意到编译器是好的,如果我将访问方法定义为const,如静态或“常规” - 所有似乎都工作。如何定义操作静态数据成员的C++方法?

我的问题是在这种情况下正确/更好的做法是什么?

谢谢!

静态数据成员的静态访问器。

+0

我的编译器似乎不允许有静态和常量的方法。我相信,一旦一个方法被定义为static,那么通过设计它就不能修改类的非静态成员 - 因为这个方法不属于该类的特定实例。 – Mym 2009-11-11 06:55:45

+0

你说得对,我的错。 – 2009-11-11 07:01:51

+0

谢谢。这对我有意义。 – Mym 2009-11-11 07:03:53

如果您的课程只包含静态成员,则应该使用singleton pattern

+0

我同意,这样的班级实际上是一个单身人士。 但是,如果我保持这种状况,会出现什么问题? – Mym 2009-11-11 06:58:07

+1

但是...要小心。单例模式经常被滥用。 – rlbond 2009-11-11 06:59:27

+0

其实,很少有“真实”的情况下,你需要单身模式,我相信只有静态功能的类完全没问题。 – 2009-11-11 07:01:15

如果所有方法都是静态的,那么创建类的实例就没有意义了。所以我建议让所有的方法都是静态的,这样你就可以在不创建类的对象的情况下使用这些方法。基本上,您将能够使用命名空间语法来调用这些方法。

+0

确实如此,调用代码可以创建类的实例(没有惩罚,空c'tor,没有非静态数据成员),或者直接访问静态方法而不创建实例。 – Mym 2009-11-11 07:06:20

+0

是的..但直接创建一个对象看起来有点奇怪的所有静态变量类。 – Naveen 2009-11-11 07:12:17

+0

@Mym:如果类不打算实例化,则应该隐藏构造函数。你的界面应该只提供那些对你的设计有意义的操作。如果只有静态数据和方法,构造函数应该是私有的(并且未实现)。 – 2009-11-11 07:14:25

我有一个只包含静态数据成员的C++类。

然后,这可能不应该是一个类,但要么在名称空间或单身的免费功能。

+0

我仍然觉得它更容易封装在一个指定的类,因为它有一个特定的角色,我有很多操作这些静态数据成员(三个不同的地图)的方法。 – Mym 2009-11-11 06:59:27

+0

+1 concur!你只需要一个头文件来声明一些函数。这些函数会改变你想要的任何静态存储变量。无需在课堂上申报,并使其他翻译单位依赖于此类别声明。 – sellibitze 2009-11-11 08:09:36

+1

因此,翻译单元应该是您的“抽象”(不是类),并且头文件将是不包含任何实现细节的接口。 – sellibitze 2009-11-11 08:11:35